繁体   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