【发布时间】:2019-01-30 14:35:47
【问题描述】:
所以我有一小段代码,它以 .gif 图像作为输入,然后将这个 .gif 图像拆分为 BufferedImage 数组。之后,它将图像存储在磁盘上的阵列中。当我这样做时,输出图像包含大量的白色像素噪声,这在输入 .gif 图像中不可见。
输入 gif 示例:
格式错误的输出图像示例(gif 中的第 3 帧):
我用来分割gif的代码如下:
public static void main(String[] args) throws Exception {
splitGif(new File("C:\\test.gif"));
}
public static void splitGif(File file) throws IOException {
ImageReader reader = ImageIO.getImageReadersBySuffix("gif").next(); reader.setInput(ImageIO.createImageInputStream(new FileInputStream(file)), false);
for(int i = 0; i < reader.getNumImages(true); i++) {
BufferedImage image = reader.read(i);
ImageIO.write(image, "PNG", new File(i + ".png"));
}
}
谁能帮帮我?
【问题讨论】:
-
new File(i + ".gif")有什么用? Gif 透明度就是它的本质。也许纯白色需要转换为透明的 RGBA。 -
@JoopEggen 我认为这不是纯白色的问题,因为格式错误的图像中显示的像素应该是源 gif 中所示的深色。
-
次要 gif 可能具有颜色不变的透明像素。
-
@JoopEggen 我不太确定我是否明白你的意思。那么你的意思是,在我看不到任何颜色(或只是白色)的地方,颜色应该与它之前的帧的颜色相同?
-
听起来合乎逻辑;保留前一个图像,对于 y / 对于 x 如果白色 setRGB 前一个图像。或者更好地将新框架绘制到 image.getGrapics 作为 gif
标签: java image javax.imageio