Масштабирование изображения Java - PullRequest
6 голосов
/ 25 мая 2010

Я вывожу изображения в PDF-файл, используя iText. Изображения всегда кажутся большими, чем они должны. Согласно книге (iText в действии), это происходит потому, что iText всегда отображает изображения с разрешением 72 точек на дюйм, независимо от того, каково фактическое свойство dpi изображения. Книга предлагает использовать image.getDpiX (), чтобы найти dpi изображения, а затем использовать 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);

Ответы [ 3 ]

1 голос
/ 25 мая 2010

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

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

if (actualDpi <= 0) actualDpi = 100f;
graphic.scalePercent(72f / actualDpi * 100f);
0 голосов
/ 07 октября 2011

Разрешение экрана, полученное с помощью

java.awt.Toolkit.getDefaultToolkit().getScreenResolution()

не помогло, изображение все еще было слишком большим. Однако можно масштабировать изображение до ширины страницы следующим образом:

BufferedImage bufferedImage = null; // your image
Image image = Image.getInstance(bufferedImage,null);
image.scalePercent((document.right()-document.left())/((float)image.getWidth())*100);
0 голосов
/ 11 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...