如何将gif图像转换为jpg?

时间:2010-09-15 11:14:36

标签: java

像这样 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 个答案:

答案 0 :(得分:2)

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

请尝试使用PNG,TIFF或GIF。

答案 1 :(得分:2)

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 :(得分:0)

我无法对代码发表评论,因为我不是Java大师,但是......

JPEG格式不支持透明背景,因此如果您希望保留透明背景,则不会发生。

(不确定为什么要进行转换,但如果您需要支持透明度的高色彩格式,请改用PNG)

答案 3 :(得分:0)

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

ImageMagick homepage

除了转换之外,您还可以调整大小,添加文本,并且几乎可以在新创建的图像上执行所有photoshop技巧,这很容易。