2010-02-12 21 views
11

Estoy intentando escalar una imagen, modificarla y luego enviarla a otro formato de imagen. Hasta ahora, he estado usando la biblioteca apache batik. Para una conversión simple, esto es fácil. Para recortar el svg, esto es fácil.Escalar un SVG en Java

Sin embargo, no puedo entender cómo escalar a la imagen completa creada por el svg. Es decir, puedo especificar el área de interés como un rectángulo delimitador, y luego la escala funciona sobre el rectángulo delimitador, pero NO sé cómo escalar la imagen de svg.

Esto es lo que tengo hasta ahora:

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

Respuesta

7

Si no se establece la indirecta KEY_AOI transcodificación, el atributo viewBox="" en el elemento raíz <svg> se utilizará para determinar el área de interés. Si el documento que está transcodificando no tiene un atributo viewBox="", se utilizarán los atributos width="" y , por lo que el AOI será (0, 0, ancho, alto).

Y si ninguno de estos está configurado, y no sabe con anticipación dónde están dentro de los gráficos del sistema de coordenadas del documento, puede calcular el cuadro delimitador del elemento raíz <svg> y usarlo como AOI. Puede hacer esto primero "booting the DOM" para su documento, y luego llamar al getBBox() en el elemento del documento.

+0

Dado que trataré con una variedad de imágenes SVG, probablemente tendré que hacer las 3 de estas. Gracias por la rápida respuesta. Lo aceptaré una vez que pueda probar esto. –

+0

@heycam por favor, ayúdenme en esta pregunta http://stackoverflow.com/questions/15286536/outofmemory-while-resizing-svg-file-using-apache-batik – Mihir

Cuestiones relacionadas