2010-02-12 4 views
11

Je tente de mettre à l'échelle une image, de la modifier et de l'exporter vers un autre format d'image. Jusqu'à présent, j'ai utilisé la bibliothèque apache batik. Pour une conversion simple, c'est facile. Pour écrêter le svg, c'est facile.Mise à l'échelle d'un fichier SVG en Java

Cependant, je n'arrive pas à comprendre comment mettre à l'échelle l'image complète créée par le svg. C'est-à-dire, je peux spécifier la zone d'intérêt comme un rectangle de délimitation, puis la mise à l'échelle fonctionne sur le rectangle de délimitation, mais je ne sais pas comment mettre à l'échelle l'image du svg.

C'est ce que j'ai jusqu'à présent:

... 
//set the output width and height 
transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, new Float(newSize.width)); 
transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, new Float(newSize.height)); 

//set the aoi for scaling. Unsure what to do here. 
transcoder.addTranscodingHint(PNGTranscoder.KEY_AOI, new Rectangle(0, 0, 100, 100)); 
... 

Répondre

7

Si vous ne définissez pas l'indice de transcodage KEY_AOI, l'attribut viewBox="" sur l'élément racine <svg> sera utilisé pour déterminer la zone d'intérêt. Si le document que vous transcodage n'a pas d'attribut viewBox="", les attributs width="" et height="" seront utilisés, de sorte que l'AOI sera (0, 0, largeur, hauteur).

Si aucun de ces paramètres n'est défini et que vous ne savez pas à l'avance où se trouvent les graphiques dans le système de coordonnées du document, vous pouvez calculer la zone de délimitation de l'élément racine <svg> et l'utiliser comme AOI. Vous pouvez le faire en premier "booting the DOM" pour votre document, puis en appelant getBBox() sur l'élément de document.

+0

Puisqu'il s'agira d'une variété d'images SVG, je devrai probablement faire les trois. Merci pour la réponse rapide. Je vais accepter une fois que je peux tester cela. –

+0

@heycam s'il vous plaît, aidez-moi sur cette question http://stackoverflow.com/questions/15286536/outofmemory-while-resizing-svg-file-using-apache-batik – Mihir