Рубрики
Без рубрики

Изменение размера изображения Java

Java Изменение размера изображения, Изменение размера изображения Java, Изменение размера изображения в java, изменение размера изображения java без потери качества и соотношения сторон, Java буферизованное изображение, Java Graphics2D

Автор оригинала: Pankaj Kumar.

Сегодня мы рассмотрим программу изменения размера изображений java. Недавно мне пришлось загрузить много изображений на FTP-сервер, но размер изображений был огромным. Поскольку я собирался использовать их только на веб-страницах, было разумно изменить их размер до меньшего размера, а затем загрузить его.

Несколько дней назад я предоставил список онлайн – инструментов для уменьшения размера изображения. Но когда у вас есть сотни изображений, лучше потратить некоторое время и написать программу, которая выполнит эту работу за вас. Итак, давайте посмотрим, как мы можем изменить размер изображения в java.

Изменение размера изображения Java

Мы можем использовать java.awt.Graphics2D класс для изменения размера изображения в java.

Ниже приведена программа, которая выполняет поиск всех файлов в каталоге, изменяет их размер до заданного размера и сохраняет его в другой каталог.

Пример программы здесь сохраняет изображения как в формате PNG, так и в формате JPG, но вы можете легко изменить его в соответствии с вашими конкретными требованиями.

Программа Для Изменения размера изображений Java

package com.journaldev.util;

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
/**
 * This class will resize all the images in a given folder
 * @author pankaj
 *
 */
public class JavaImageResizer {

	public static void main(String[] args) throws IOException {

		File folder = new File("/Users/pankaj/Desktop/images");
	    File[] listOfFiles = folder.listFiles();
		System.out.println("Total No of Files:"+listOfFiles.length);
		Image img = null;
		BufferedImage tempPNG = null;
		BufferedImage tempJPG = null;
		File newFilePNG = null;
		File newFileJPG = null;
		for (int i = 0; i < listOfFiles.length; i++) {
		      if (listOfFiles[i].isFile()) {
		        System.out.println("File " + listOfFiles[i].getName());
		        img = ImageIO.read(new File("/Users/pankaj/Desktop/images/"+listOfFiles[i].getName()));
		        tempPNG = resizeImage(img, 100, 100);
		        tempJPG = resizeImage(img, 100, 100);
		        newFilePNG = new File("/Users/pankaj/Desktop/images/resize/"+listOfFiles[i].getName()+"_New.png");
		        newFileJPG = new File("/Users/pankaj/Desktop/images/resize/"+listOfFiles[i].getName()+"_New.jpg");
		        ImageIO.write(tempPNG, "png", newFilePNG);
		        ImageIO.write(tempJPG, "jpg", newFileJPG);
		      }
		}
		System.out.println("DONE");
	}

	/**
	 * This function resize the image file and returns the BufferedImage object that can be saved to file system.
	 */
	public static BufferedImage resizeImage(final Image image, int width, int height) {
        final BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        final Graphics2D graphics2D = bufferedImage.createGraphics();
        graphics2D.setComposite(AlphaComposite.Src);
        //below three lines are for RenderingHints for better image quality at cost of higher processing time
        graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
        graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
        graphics2D.drawImage(image, 0, 0, width, height, null);
        graphics2D.dispose();
        return bufferedImage;
    }
}
  • Первые несколько строк используют Java IO для извлечения списка файлов из каталога , а затем в цикле for обрабатывается каждый файл.
  • изменение размера изображения – это метод, в котором Graphics2D используется для изменения размера изображения и возврата его в виде буферизованного изображения объекта.
  • Снова мы используем ImageIO , чтобы записать его в файловую систему как в формате PNG, так и в формате JPG.

Важные моменты изменения размера изображения Java

  1. Вы можете использовать RenderingHints для получения изображения высокого качества за счет времени обработки. Если вы не уменьшаете изображения до очень маленького размера, возможно, вам захочется избежать их для более быстрой обработки. Это зависит от вашей ситуации, когда вам нужна быстрая обработка или лучшее качество.
  2. Метод не создает никаких Исключений , даже если есть какие-либо файлы, которые не являются файлами изображений, такими как текстовые файлы, файлы doc или pdf. В этом случае он изменит его размер, и вы получите изображение черного цвета. Вы можете легко расширить код, чтобы пропустить эти файлы, отфильтровав их по имени.
  3. Размер изображения PNG больше, чем размер изображения JPG для того же разрешения, и это значительно. Поэтому, если вы хотите изменить размер изображения для веб-страниц, вы можете использовать формат JPG, чтобы сэкономить время загрузки страницы.

Результаты программы изменения размера изображений Java

Я поместил один файл PNG и один файл PDF в каталог изображений и выполнил программу.

Входное изображение-изображение Eclipse Juno размером 168 КБ:

Вот выходные изображения с размером:

PNG изображение без подсказок 23 КБ

JPG изображение без подсказок 4 КБ

PNG изображение с подсказками 24 КБ

JPG изображение с подсказками 4 КБ

Вывод файлов без изображений в формате PNG и JPG

Я надеюсь, что данная программа поможет вам быстро изменить размер изображений.

Java Изменяет размер изображения с соотношением сторон

В обычном сценарии вы хотите сохранить соотношение сторон изображения, иначе оно будет выглядеть растянутым с одной стороны. Вот фрагмент кода, который поможет вам сохранить соотношение сторон.

double aspectRatio = (double) img.getWidth(null)/(double) img.getHeight(null);
tempPNG = resizeImage(img, 100, (int) (100/aspectRatio));

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

Дальнейшее чтение: Вот еще одна программа для загрузки файлов на сервер с помощью Apache Commons Net FTP API.

Ссылка: Graphics2D API Doc