Подтвердить что ты не робот

Масштабирование SVG в Java

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

Однако я не могу понять, как масштабировать до полного изображения, созданного 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 ) );
...
4b9b3361

Ответ 1

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

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