2010-09-15 3 views
1

как этот gif imageКак преобразовать изображение gif в jpg?

она имеет прозрачный фон,

, когда я с помощью 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

+1

http://www.stackoverflow.com/questions/464825/converting-transparent-gif-png-to-jpeg-using-java – JoseK

+1

JPEG - формат с потерями, предназначенный для фотографий, и является плохим для изображения с резким края, как диаграмма или предоставленный логотип. Это будет выглядеть нечетким и уродливым. Вместо этого я рекомендую PNG. –

ответ

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

JPG не поддерживает прозрачность, поэтому вы не можете.

Попробуйте использовать PNG, TIFF или GIF.

+0

Мне не нужна прозрачность, я хочу белый (#FFFFFF) фон – Koerr

+0

Хм, извините, это не было указано в вашем вопросе. Что вы подразумеваете под словом «он сломан»? –

0

Я не могу комментировать код, так как я не гуру Java, но ...

Формат JPEG не поддерживает прозрачный фон, поэтому, если вы ожидаете, что это будет сохранено, этого не произойдет.

(не знаю, почему вы делаете преобразование, но если вам нужен формат высокого цвета, который не поддерживает прозрачность, используйте PNG вместо)

0

Преобразование из одного формата в другой только начало :) если это был я, я буду использовать ImageMagik, передав команду ОС и пусть ImageMagick заботиться о покое

ImageMagick homepage

Кроме преобразования вы можете изменить размер, добавить текст и почти сделать все трюки фотошоп на вновь создано изображение, и это легко.

Смежные вопросы