Java图像缩放

时间:2010-05-25 14:00:29

标签: java image itext

我正在使用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 个答案:

答案 0 :(得分:1)

根据com.lowagie.text.Image JavaDoc,方法getDpiX获取X方向上的每英寸点数。如果不可用,则返回零。

当getDpiX方法返回零时,您将不得不假设一个值。 100 dpi是一个很好的假设。

if (actualDpi <= 0) actualDpi = 100f;
graphic.scalePercent(72f / actualDpi * 100f);

答案 1 :(得分:0)

对于GIF,没有地方可以在文件中存储“DPI”信息,因此“actualDpi”在这种情况下没有意义。对于JPEG,“DPI”信息可以存储在文件中,但不是必需的,如果没有设置:“actualDPI”也没有意义。 真正的答案是:没有“实际DPI”这样的东西,要么提供信息(即“在这个图像中我希望用这个特定的物理宽度(或高度)渲染1个像素”),或者它不是。另一个元素在你的句子中:“总是看起来比它们应该的大”; “应该”是存储在图像中的DPI信息。因此,如果没有此信息,并且您觉得当您打开图像时它似乎正好在屏幕上,那么您必须计算屏幕的密度(像素数的宽度除以屏幕的宽度,以英寸为单位),并将其用作“actualDPI”变量。

答案 2 :(得分: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);
相关问题