簡體   English   中英

Java圖像縮放

[英]Java image scaling

我正在使用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);

根據com.lowagie.text.Image JavaDoc,方法getDpiX獲取X方向上的每英寸點數。 如果不可用則返回零。

當getDpiX方法返回零時,您將不得不假設一個值。 100 dpi是一個很好的假設。

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

對於GIF,沒有地方可以在文件中存儲“DPI”信息,因此“actualDpi”在這種情況下沒有意義。 對於JPEG,“DPI”信息可以存儲在文件中,但不是必需的,如果沒有設置:“actualDPI”也沒有意義。 真正的答案是:沒有“實際DPI”這樣的東西,要么提供信息(即“在這個圖像中我希望用這個特定的物理寬度(或高度)渲染1個像素”),或者它不是。 另一個元素在你的句子中:“總是看起來比它們應該的大”; “應該”是存儲在圖像中的DPI信息。 因此,如果沒有此信息,並且您覺得當您打開圖像時它似乎正好在屏幕上,那么您必須計算屏幕的密度(像素數的寬度除以屏幕的寬度,以英寸為單位),並將其用作“actualDPI”變量。

屏幕分辨率,由。檢索

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM