Масштабирование SVG в Java - PullRequest
12 голосов
/ 13 февраля 2010

Я пытаюсь масштабировать изображение, изменить его, а затем вывести в другой формат изображения. До сих пор я использовал библиотеку apache batik . Для простого преобразования это легко. Для отсечения SVG это просто.

Однако я не могу понять, как масштабировать до полного изображения, созданного SVG. То есть я могу указать интересующую область в качестве ограничивающего прямоугольника, а затем масштабирование работает по ограничивающему прямоугольнику, но я НЕ знаю, как масштабировать изображение изображения.

Это то, что я имею до сих пор:

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

1 Ответ

7 голосов
/ 13 февраля 2010

Если вы не установите подсказку транскодирования KEY_AOI, то для определения интересующей области будет использоваться атрибут viewBox="" корневого элемента <svg>. Если документ, который вы транскодируете, не имеет атрибута viewBox="", то будут использоваться атрибуты width="" и height="", поэтому AOI будет (0, 0, ширина, высота).

И если ничего из этого не установлено, и вы заранее не знаете, где в системе координат документа находятся графики, тогда вы можете вычислить ограничивающую рамку корневого элемента <svg> и использовать ее в качестве AOI. Вы можете сделать это, сначала «загрузив DOM» для вашего документа, а затем вызвав getBBox() для элемента документа.

...