java - 从 imageReader 写回修改后的图像

标签 java file-io bufferedimage javax.imageio

我从动画 gif 中读取了分离的图像,我只需在 frames[i] 中对它们进行更改,然后将它们设置回文件并使用 writer 保存为新文件。

    File file = new File("gif1.gif");
    ImageReader reader = ImageIO.getImageReadersBySuffix("GIF").next();
    ImageInputStream in = ImageIO.createImageInputStream(file);
    reader.setInput(in);

    File output = new File("k.gif");

    ImageWriter writer = ImageIO.getImageWritersBySuffix("GIF").next();
    ImageOutputStream out = ImageIO.createImageOutputStream(file);
    writer.setOutput(out);

    int numImages = reader.getNumImages(true); 
    BufferedImage[] frames = new BufferedImage[pocetObrazku];

    for (int i = 0; i < numImages; i++)
    {

        BufferedImage image = reader.read(i);
        frames[i] = reader.read(i);        
    }    

我会很高兴获得任何帮助。

最佳答案

坦克@StanislavL 评论中的链接(https://community.oracle.com/thread/1264385),这真的很有帮助。我的解决方案是:

File file = new File("gif1.gif");
ImageReader reader = ImageIO.getImageReadersBySuffix("GIF").next();
ImageInputStream in = ImageIO.createImageInputStream(file);
reader.setInput(in);

int numImages = reader.getNumImages(true); 
BufferedImage[] frames = new BufferedImage[pocetObrazku];

File fileOut = new File("k.gif");
fileOut.createNewFile();
ImageWriter iw = ImageIO.getImageWritersByFormatName("gif").next();

ImageOutputStream ios = ImageIO.createImageOutputStream(fileOut);
iw.setOutput(ios);
iw.prepareWriteSequence(null);

for (int i = 0; i < numImages ; i++) {
    BufferedImage image = reader.read(i);
    frames[i] = reader.read(i);

    IIOMetadata metadata = reader.getImageMetadata(i);    
    IIOImage ii = new IIOImage(image, null, metadata);      
    iw.writeToSequence(ii, (ImageWriteParam) null);    
}

关于java - 从 imageReader 写回修改后的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29371881/

相关文章:

xcode - OS X 应用程序授权

使用 ImageIO.read 将图像加载为 bufferedImage 时出现 java.lang.IllegalArgumentException : input == null!

java - Android N Java 8 功能(Jack 编译器)和 Kotlin 互操作

java:将二进制文件转换为文本?

ruby-on-rails - 从文件系统而不是数据库提供我的文本?

matlab - 加快处理较大的二进制文件

java - 尝试写入新文件时出现 FileNotFoundException(访问被拒绝)

java - 与 new 关键字相比,使用 Class.forName() 加载实例有什么优势?

java - 为什么 BufferedImage 的初始化速度比 Image 快

java - 反转 BufferedImage 的 alpha