2010-02-12 7 views
11

Sto tentando di ridimensionare un'immagine, modificarla e quindi inviarla a un altro formato di immagine. Finora, ho utilizzato la libreria apache batik. Per la conversione semplice, questo è facile. Per ritagliare lo svg, questo è facile.Ridimensionamento di un file SVG in Java

Tuttavia, non riesco a capire come ridimensionare l'immagine completa creata dallo svg. Cioè, posso specificare l'area di interesse come un rettangolo di delimitazione, e quindi il ridimensionamento funziona sul rettangolo di delimitazione, ma NON so come ridimensionare l'immagine dello svg.

Questo è quello che ho finora:

... 
//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)); 
... 

risposta

7

Se non si imposta il suggerimento KEY_AOI transcodifica, l'attributo viewBox="" sull'elemento radice <svg> verrà utilizzato per determinare l'area di interesse. Se il documento che si sta transcodificando non ha un attributo viewBox="", verranno utilizzati gli attributi width="" e height="", quindi l'AOI sarà (0, 0, larghezza, altezza).

E se nessuno di questi è impostato, e non si sa in anticipo dove si trova la grafica all'interno del sistema di coordinate del documento, è possibile calcolare il riquadro di delimitazione dell'elemento radice <svg> e utilizzarlo come AOI. È possibile farlo prima dal "booting the DOM" per il documento e quindi chiamando getBBox() sull'elemento del documento.

+0

Dal momento che avrò a che fare con una varietà di immagini SVG, probabilmente dovrò fare tutte e 3 queste cose. Grazie per la risposta rapida. Accetterò una volta che posso testare questo. –

+0

@heycam per favore, aiutami su questa domanda http://stackoverflow.com/questions/15286536/outofmemory-while-resizing-svg-file-using-apache-batik – Mihir