Java图像缩放

6
我使用iText将图像输出到PDF文件中,但是图像总是比预期的要大。根据书籍(iText in Action)的说法,这是因为iText始终以72 dpi的分辨率显示图像,而不管图像实际的dpi属性是什么。该书建议使用image.getDpiX()查找图像的dpi,然后使用image.scalePercent(72 / actualDpi * 100)来正确显示图像。到目前为止,我所有图像的getDpiX()属性都返回0(我尝试了2个gif和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
根据com.lowagie.text.Image JavaDoc,方法getDpiX获取X方向上的每英寸点数。如果不可用,则返回零。
当getDpiX方法返回零时,您将不得不假定一个值。 100 dpi是任何一个好的假设。
if (actualDpi <= 0) actualDpi = 100f;
graphic.scalePercent(72f / actualDpi * 100f);

0

通过检索,获取屏幕分辨率

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
对于GIF格式,文件中没有存储“DPI”信息的地方,因此在这种情况下,“actualDpi”没有意义。对于JPEG格式,可以将“DPI”信息存储在文件中,但不是强制性的,如果未设置:“actualDPI”也没有意义。 真正的答案是:不存在“实际DPI”的概念,要么提供信息(即“在此图像中,我希望使用特定的物理宽度(或高度)呈现1个像素”),要么不提供。你的句子中还有一个元素:“总是看起来比它们应该的尺寸大”;“应该的”是存储在图像中的DPI信息。因此,如果缺少此信息,并且当您打开图像时感觉屏幕上的显示效果正确,则必须计算屏幕的密度(以像素数除以屏幕英寸宽度),并将其用作您的“actualDPI”变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接