簡體   English   中英

Java-為大圖像添加填充

[英]Java - Add padding to large images

我需要在大圖像周圍添加特定的填充,並且如下面的代碼片段所示,當前使用的方法正在消耗內存。 立即打開PNG會占用大約300mb的內存,而復制該副本會使我越過700mb,因此我正在尋找一種方法來避免占用所有可用內存。 有什么建議么?

...
BufferedImage img = ImageIO.read(new File("OldWorld.png"));
BufferedImage img2 = new BufferedImage(img.getHeight()+padding,img.getWidth()+padding, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = img2.createGraphics();
g2.setPaint(new Color(0,0,0,0);
g2.fillRect(0, 0, img.getHeight()+padding, img.getWidth()+padding);
g2.drawImage(img, img.getHeight(),img.getWidth(), null);
...

沒有直接的方法可以解決此問題。 在Java中使用大圖像會消耗大量內存。

一些替代方法是:

  1. 使用netpbm庫http://netpbm.sourceforge.net/預處理圖像。 要填充圖像,請使用以下命令:

     pngtopnm OldWorld.png | pnmpad -black 48 -left 48 -top 48 | pnmtopng > padded.png 
  2. 減少圖像中的顏色數量,以便可以使用圖像類型BufferedImage.TYPE_INDEXED ,每個像素只有一個字節,而不是四個字節。

  3. 使用多個圖塊而不是一個大圖像,並一次使用一個圖塊。 這樣就可以避免在內存中存儲大量圖像數據。

暫無
暫無

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

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