【问题标题】:Java - Add padding to large imagesJava - 为大图像添加填充
【发布时间】:2011-09-21 16:43:48
【问题描述】:

我需要在大图像周围添加特定的填充,我正在使用的当前方法(如下面的 sn-p 所示)正在消耗内存。打开 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 padding bufferedimage


    【解决方案1】:

    没有直接的方法可以解决这个问题。 在 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. 使用多个图块而不是单个大图像并工作 一次一张瓷砖。然后你避免有很多图像 内存中的数据。

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2012-05-22
      • 2017-12-25
      • 2017-03-20
      • 2011-08-15
      • 2021-12-11
      • 2014-05-24
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多