Конвертируем PNG в JPEG на Java

Давайте научимся конвертировать картинки с PNG в JPEG формат? Сделать это не так уж сложно как могло бы казаться.

Что на потребуется для этого?

1) Это картинка в PNG формате (devcolibri.png — 94Kb):

 

2) Желание преобразовать PNG в JPEG формат :)

Внимание!
При изменении формата изображения с PNG на JPEG ожидайте ухудшение качества изображения так как JPEG не поддерживает некоторые свойства формата PNG (например прозрачность).

Шаг 1.

Создаем буфер в котором будем хранить считанное изображение:

BufferedImage bufferedImage = ImageIO.read(new File("c:\\devcolibri.png"));

Шаг 2.

Теперь нужно создать новое изображение которое в будущем и будет нашим преобразованным JPEG.

Для этого создадим в буфере новое изображение:

BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(),
			bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);

Новое изображение должно быть такой же высоты и ширины.

Шаг 3.

Записываем на созданное в буфере с читанное PNG изображение и заливаем фон белым цветом:

newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);

Шаг 4.

Сохраняем уже с конвертированную картинку:

ImageIO.write(newBufferedImage, "jpg", new File("c:\\devcolibri.jpg"));

В результате мы получим новое изображение: devcolibri.jpg — 181Kb

Шаг 5.

Выводи сообщение об успешной конвертации изображения, потому что конвертация может занять некоторое время и что бы видеть её окончание. Но это не обязательно!

System.out.println("Готово!");

Полный листинг кода.

package com.devcolibri;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ConvertImageFile {

   public static void main(String[] args) {
	BufferedImage bufferedImage;
	try {
	  //Считываем изображение в буфер
	  bufferedImage = ImageIO.read(new File("c:\\devcolibri.png"));

	  // создаем пустое изображение RGB, с тай же шириной высотой и белым фоном
	  BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(),
			bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
	  newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);

	  // записываем новое изображение в формате jpg
	  ImageIO.write(newBufferedImage, "jpg", new File("c:\\devcolibri.jpg"));

	  System.out.println("Готово!");

	} catch (IOException e) {
	  e.printStackTrace();
	}

   }

}

Как видите ничего сложного нет.

Урок создан: 08 апреля 2013 | Просмотров: 5825 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 09 января 2014 в 16:02

    Александр

    Добрый день, Александр.

    Спасибо за статью!

    Позвольте спросить какое предназначение выполняет этот код:

    // создаем пустое изображение RGB, с тай же шириной высотой и белым фоном
    BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(),
    bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
    newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);

    Его цель только залить белым фоном или еще что-то?

    Пробовал без него и вроде тоже работает.

    С уважением,
    Александр.