代码之家  ›  专栏  ›  技术社区  ›  Koerr

如何将gif图像转换成jpg?

  •  1
  • Koerr  · 技术社区  · 15 年前

    gif image

    ImageIO.write(image,"jpg", file) 为了保存,它被打破了

    here

    如何解决这个问题?谢谢您

    我的代码:

    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    import javax.imageio.ImageIO;
    import junit.framework.TestCase;
    
    public class ImageResize1  extends TestCase{
    
        public void testT1() throws IOException{
            URL url=new URL("http://ec.europa.eu/culture/media/programme/images/logos/01_tr_media_col/01_tr_media_col_gif.gif");
            BufferedImage image=ImageIO.read(url);
            File file=new File("C:/temp/java/t7.jpg");
            ImageIO.write(image,"jpg", file);
        }
    }
    

    我用过:

    for(int x = 0; x < scaled.getWidth(); x++) {
        for(int y = 0; y < scaled.getHeight(); y++) {
            int rgb = scaled.getRGB(x, y);
            int alpha = (rgb >> 24) & 0xff;
            if(alpha != 255) {
                scaled.setRGB(x, y,-1); //set white
            }
        }
    }
    

    here

    这不对,结果是 here

    4 回复  |  直到 9 年前
        1
  •  2
  •   Community Mohan Dere    9 年前
    AreaAveragingScaleFilter scaleFilter =
        new AreaAveragingScaleFilter(
                    Math.round(originalWidth / factorX),
                    Math.round(originalHeight / factorY));
    ImageProducer producer = new FilteredImageSource(original.getSource(), scaleFilter);
    ImageGenerator generator = new ImageGenerator();
    producer.startProduction(generator);
    BufferedImage scaled = generator.getImage();
    
    for(int x = 0; x < scaled.getWidth(); x++) {
        for(int y = 0; y < scaled.getHeight(); y++) {
            int rgb = scaled.getRGB(x, y);
            int alpha = (rgb >> 24) & 0xff;
            if(alpha != 255) {
                scaled.setRGB(x, y,-1); //set white
            }
        }
    }
    
    
    JPEGImageWriteParam param = new JPEGImageWriteParam(null);
    param.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
    param.setCompressionQuality((float) 0.85);
    java.util.Iterator<ImageWriter> it = ImageIO.getImageWritersBySuffix("jpg");
    ImageWriter writer = it.next();
    dest.getParentFile().mkdirs();
    writer.setOutput(new FileImageOutputStream(dest));
    writer.write(null, new IIOImage(scaled, null, null), param);
    writer.dispose();   
    

    here

        2
  •  2
  •   Vivien Barousse    15 年前

    JPG不支持透明,所以你不能。

        3
  •  0
  •   Spudley Pat    15 年前

    我不能评论代码,因为我不是Java专家,但是。。。

    JPEG格式不支持透明背景,所以如果您希望保留透明背景,就不会发生这种情况。

    (不清楚为什么要进行转换,但如果需要支持透明的高颜色格式,请改用PNG)

        4
  •  0
  •   Babak Bandpay    15 年前

    从一种格式转换到另一种格式只是一个开始:)如果是我,我将通过将命令传递给操作系统来使用ImageMagik,并让ImageMagick处理其余的内容

    ImageMagick homepage

    除了转换你可以调整大小,添加文本和几乎所有的photoshop技巧对你的新创建的图像,这是很容易的。