2012-03-04 3 views
0

Я пытаюсь преобразовать изображение PNG в изображение JPEG после this учебник. Но я столкнулся с проблемой. Полученное изображение имеет розовый слой.Java PNG to JPG Ошибка

У кого-нибудь есть решение этой проблемы? Или какой код я должен использовать для преобразования изображения в нужный формат?

Заранее благодарен!

+0

Это не столько учебник, сколько пара фрагментов кода. Можете ли вы загрузить изображение проблемы? Насколько велик он в байтах? –

+0

Вот пример изображения: http://imageshack.us/photo/my-images/19/samplepngimage.png/ –

ответ

3
  1. Создать BufferedImage нужного размера, например:

    BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB)

  2. заполнить его с соответствующим цветом фона:

    img.getGraphics().fillRect(....)

  3. вызова DrawImage на графике на изображение в на этом фоне:

    img.getGraphics().drawImage(image, 0, 0, null);

затем записать изображение как JPG, как обычно.

+0

Спасибо! Функция fillRect выполнила задание. –

+0

См. Также graphics.drawImage с выбранным цветом и нулевым ImageObserver: http://docs.oracle.com/javase/8/docs/api/java/awt/Graphics.html#drawImage-java.awt.Image-int -int-java.awt.Color-java.awt.image.ImageObserver- – m4rtin

3

Какой цветной режим вы используете? Пока вы создаете объект с буферизированным изображением, попробуйте добавить этот тип, как этот параметр.

File newFile = new File(path + fileName + "." + Strings.FILE_TYPE); 

    Image image = null; 
    try { 
     image = ImageIO.read(url); // I was using an image from web 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 

    image = image.getScaledInstance(width, height, Image.SCALE_SMOOTH); 
    try { 
     BufferedImage img = toBufferedImage(image); 
     ImageIO.write(img, "jpg", newFile); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 



} 

private static BufferedImage toBufferedImage(Image src) { 
    int w = src.getWidth(null); 
    int h = src.getHeight(null); 
    int type = BufferedImage.TYPE_INT_RGB; // other options 
    BufferedImage dest = new BufferedImage(w, h, type); 
    Graphics2D g2 = dest.createGraphics(); 
    g2.drawImage(src, 0, 0, null); 
    g2.dispose(); 
    return dest; 
} 
+0

К настоящему времени у меня есть эти 4 строки в учебнике. И я не знаю, что это за переменные: dest и src. Как объявить их? –

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