Масштабирование изображения Java

Я произвожу изображения в файл PDF с помощью iText. Изображения всегда кажутся больше, чем они, как предполагается. Согласно книге (iText в Действии), это вызвано тем, что iText всегда отображает изображения в разрешении 72 точек на дюйм, независимо от того, каково фактическое свойство точек на дюйм изображения. Книга предлагает использовать image.getDpiX (), чтобы найти точки на дюйм изображения и затем использовать image.scalePercent (72 / actualDpi * 100) для отображения изображения правильно. До сих пор getDpiX () свойство всех моих изображений возвратилось 0 (я попробовал 2 gifs и 1 jpg). Там другой путь состоит в том, чтобы выяснить фактический DPI так, чтобы мои изображения масштабировались правильно?

com.lowagie.text.Image graphic = com.lowagie.text.Image.getInstance(imgPath);
float actualDpi = graphic.getDpiX();
if (actualDpi > 0)
  //Never gets here
  graphic.scalePercent(72f / actualDpi * 100);
6
задан twpc 25 May 2010 в 14:00
поделиться

2 ответа

Для GIF нет места для хранения информации "DPI" в файле, поэтому "actualDpi" не имеет никакого значения в этом случае. Для JPEG информация "DPI" может храниться в файле, но не является обязательной, и если она не задана: "actualDPI" также не имеет значения. Реальный ответ: нет такого понятия, как "фактический DPI", либо информация предоставляется (т.е. "в этом изображении я хочу, чтобы 1 пиксель отображался с такой-то физической шириной (или высотой)"), либо нет. Другой элемент находится в вашем предложении: "всегда выглядят больше, чем должны"; "должны" - это информация DPI, хранящаяся в изображении. Так что если эта информация отсутствует, и вы чувствуете, что при открытии изображения оно кажется правильным на экране, тогда вы должны вычислить плотность вашего экрана (ширина в количестве пикселей, деленная на ширину в дюймах вашего экрана), и использовать это как переменную "actualDPI".

0
ответ дан 17 December 2019 в 22:11
поделиться

Согласно com.lowagie.text.Image JavaDoc, метод getDpiX получает количество точек на дюйм в направлении X. Возвращает ноль, если недоступен.

Вам придется принять значение, когда метод getDpiX возвращает ноль. 100 dpi - такое же хорошее предположение, как и любое другое.

if (actualDpi <= 0) actualDpi = 100f;
graphic.scalePercent(72f / actualDpi * 100f);
1
ответ дан 17 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: