Пример в этой статье описывает метод создания миниатюр и масштабирования изображений в Java. Поделитесь этим со всеми для справки. Конкретный метод реализации заключается в следующем:
Этот экземпляр поддерживает масштабирование ширины и высоты изображения до указанной ширины и высоты и сохранение его в указанном каталоге. Коэффициент уменьшения изображения рассчитывается на основе размера целевого объекта и стандартного (указанного) размера изображения. можно установить качество масштабирования, а качество масштабирования изображения можно установить в соответствии с указанным масштабированием изображения по ширине и высоте.
Конкретный код выглядит следующим образом:
Скопируйте код кода следующим образом:
пакет com.hoo.util;
импортировать java.awt.Image;
импортировать java.awt.image.BufferedImage;
импортировать java.io.File;
импортировать java.io.FileOutputStream;
импортировать java.io.IOException;
импортировать java.net.MalformedURLException;
импортировать java.net.URL;
импортировать javax.imageio.ImageIO;
импортировать com.sun.image.codec.jpeg.ImageFormatException;
импортировать com.sun.image.codec.jpeg.JPEGCodec;
импортировать com.sun.image.codec.jpeg.JPEGEncodeParam;
импортировать com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* <b>функция:</b> класс инструментов масштабирования изображения, создание миниатюр, растягивание пропорций изображения.
*@authorhoojo
* @createDate 2012-2-3 10:08:47
* @file ScaleImageUtils.java
* @package com.hoo.util
* @версия 1.0
*/
публичный абстрактный класс ScaleImageUtils {
частный статический финальный float DEFAULT_SCALE_QUALITY = 1f;
Private static Final String DEFAULT_IMAGE_FORMAT = ".jpg" // Формат файла изображения
частная статическая окончательная строка DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>функция:</b> Установить класс перечисления качества сжатия изображения;
* Некоторые рекомендации: 0,75 высокого качества, 0,5 среднего качества, 0,25 низкого качества.
*@authorhoojo
* @createDate 2012-2-7 11:31:45
* @file ScaleImageUtils.java
* @package com.hoo.util
* @проект JQueryMobile
* @версия 1.0
*/
общественное перечисление ImageQuality {
макс(1,0f), высокий(0,75f), средний(0,5f), низкий(0,25f);
частное плавающее качество;
public Float getQuality() {
вернуть это.качество;
}
ImageQuality(Плавающее качество) {
это.качество = качество;
}
}
личное статическое изображение; изображение;
/**
* <b>функция:</b> вычисляет коэффициент уменьшения изображения на основе размера целевого объекта и стандартного (заданного) размера.
*@authorhoojo
* @createDate 2012-2-6 16:41:48
* @param targetWidth Ширина цели.
* @param targetHeight высота цели
* @paramstandardWidth стандартная (заданная) ширина
* @paramstandardHeight стандартная (заданная) высота
* @return наименьшее подходящее соотношение
*/
public static double getScaling(double targetWidth, double targetHeight, doublestandardWidth, doublestandardHeight) {
двойная ширинаScaling = 0d;
двойная высотаScaling = 0d;
если (targetWidth > стандартная ширина) {
widthScaling = StandardWidth / (targetWidth * 1.00d);
} еще {
ширинаМасштабирование = 1d;
}
если (targetHeight > StandardHeight) {
heightScaling = StandardHeight/(targetHeight * 1.00d);
} еще {
высотаScaling = 1d;
}
return Math.min(widthScaling, heightScaling);
}
/**
* <b>функция:</b> Масштабируйте ширину и высоту изображения до указанной ширины и высоты и сохраните его в каталоге savePath.
*@authorhoojo
* @createDate 6 февраля 2012 г., 16:54:35
* @param width ширина масштабирования
* @param высота масштабирования высота
* @param savePath каталог сохранения
* @param targetImage Целевое изображение, которое нужно увеличить.
* @return Путь и имя сохранения изображения
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (ширина int, высота int, String savePath, Image targetImage) выдает ImageFormatException, IOException {
ширина = Math.max(ширина, 1);
высота = Math.max(высота, 1);
Изображение BufferedImage = новое BufferedImage(ширина, высота, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, ширина, высота, ноль);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = новый FileOutputStream (новый файл (savePath));
Кодер JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(изображение);
изображение.flush();
фос.флеш();
фос.закрыть();
вернуть путь сохранения;
}
/**
* <b>функция:</b> Вы можете установить качество масштабирования изображения и масштабировать изображение в соответствии с заданной шириной и высотой.
*@authorhoojo
* @createDate 2012-2-7 11:01:27
* @param width ширина масштабирования
* @param высота масштабирования высота
* @param качество Качество сжатия изображения, максимальное значение — 1, используйте значение перечисления: {@link ImageQuality};
* Некоторые рекомендации: 0,75 высокого качества, 0,5 среднего качества, 0,25 низкого качества.
* @param savePath каталог сохранения
* @param targetImage Целевое изображение, которое нужно увеличить.
* @return Путь и имя сохранения изображения
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (ширина int, высота int, качество Float, String savePath, Image targetImage) выдает ImageFormatException, IOException {
ширина = Math.max(ширина, 1);
высота = Math.max(высота, 1);
Изображение BufferedImage = новое BufferedImage(ширина, высота, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, ширина, высота, ноль);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = новый FileOutputStream (новый файл (savePath));
Кодер JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(изображение);
if (качество == null || качество <= 0) {
качество = DEFAULT_SCALE_QUALITY;
}
/**Установить качество сжатия изображения*/
encodeParam.setQuality(качество, правда);
encoder.encode(изображение, encodeParam);
изображение.flush();
фос.флеш();
фос.закрыть();
вернуть путь сохранения;
}
/**
* <b>функция:</b> вычисляет подходящий размер для уменьшения изображения, указав размер и размер изображения.
*@authorhoojo
* @createDate 2012-2-6 17:53:10
* @param width указанная ширина
* @param height указанная высота
* @param image файл изображения
* @return Возвращает массив int ширины и высоты.
*/
public static int[] getSize(int width, int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
двойное масштабирование = getScaling(targetWidth, targetHeight, width, height);
long StandardWidth = Math.round(targetWidth * масштабирование);
long StandardHeight = Math.round(targetHeight * масштабирование);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>функция:</b> Возвращает увеличенную или уменьшенную ширину и высоту с помощью указанного соотношения и объекта изображения.
*@authorhoojo
* @createDate 2012-2-7 10:27:59
* Коэффициент масштабирования @param
* @param image объект изображения
* @return Возвращает ширину, высоту
*/
public static int[] getSize(float Scale, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long StandardWidth = Math.round(targetWidth * масштаб);
long StandardHeight = Math.round(targetHeight * Scale);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int width, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
длинная высота = Math.round((targetHeight * width)/(targetWidth * 1.00f));
return new int[] { width, Integer.parseInt(String.valueOf(height)) };
}
public static int[] getSizeByHeight(int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
длинная ширина = Math.round((targetWidth * height) / (targetHeight * 1.00f));
return new int[] { Integer.parseInt(String.valueOf(width)), height };
}
/**
*
* <b>функция:</b> Уменьшите ширину и высоту указанного файла изображения targetFile, которые превышают указанную ширину и высоту, и сохраните их в каталоге savePath.
*@authorhoojo
* @createDate 6 февраля 2012 г., 16:57:02
* @param width уменьшенная ширина
* @param height уменьшенная высота
* @param savePath каталог сохранения
* @param targetImage изменило целевое изображение
* @return Путь и имя сохранения изображения
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (ширина int, высота int, String savePath, File targetFile) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetFile);
int[] size = getSize(ширина, высота, изображение);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>функция</b>: уменьшите ширину и высоту указанного файла сетевого изображения targetURL, которые превышают указанную ширину и высоту, и сохраните их в каталоге savePath.
*@authorhoojo
* @createDate 6 февраля 2012 г., 16:57:07
* @param width уменьшенная ширина
* @param height уменьшенная высота
* @param savePath каталог сохранения
* @param targetImage изменило целевое изображение
* @return Путь и имя сохранения изображения
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (ширина int, высота int, String savePath, URL targetURL) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetURL);
int[] size = getSize(ширина, высота, изображение);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>функция:</b> масштабирует локальный файл изображения в соответствии с указанным соотношением.
*@authorhoojo
* @createDate 2012-2-7 10:29:18
* Коэффициент масштабирования @param
* @param savePath Сохранить путь и имя файла.
* @param targetFile локальный файл изображения
* @return новое имя файла
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (масштаб с плавающей запятой, String savePath, File targetFile) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetFile);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>функция:</b> масштабирует файл сетевого изображения в соответствии с указанным соотношением.
*@authorhoojo
* @createDate 2012-2-7 10:30:56
* Коэффициент масштабирования @param
* @param savePath Сохранить путь и имя файла.
* @param targetFile локальный файл изображения
* @return новое имя файла
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (масштаб с плавающей запятой, String savePath, URL-адрес targetURL) выдает исключение ImageFormatException, IOException {
изображение = ImageIO.read(targetURL);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>функция:</b> пропорционально масштабирует локальные изображения в соответствии с фиксированной шириной.
*@authorhoojo
* @createDate 2012-2-7 10:49:56
* @param width фиксированная ширина
* @param savePath сохранить путь и имя
* @param targetFile локальный целевой файл
* @return Возвращает путь сохранения
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize (int width, String savePath, File targetFile) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetFile);
int[] size = getSize(ширина, изображение);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>функция:</b> пропорционально масштабирует сетевые изображения в соответствии с фиксированной шириной.
*@authorhoojo
* @createDate 2012-2-7 10:50:52
* @param width фиксированная ширина
* @param savePath сохранить путь и имя
* @param targetFile локальный целевой файл
* @return Возвращает путь сохранения
* @throws ImageFormatException
* @throwsIOException
*/
публичное статическое изменение размера строки (ширина int, String savePath, URL targetURL) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetURL);
int[] size = getSize(ширина, изображение);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>функция:</b> пропорционально масштабирует локальные изображения в соответствии с фиксированной высотой.
*@authorhoojo
* @createDate 2012-2-7 10:51:17
* @param height фиксированная высота
* @param savePath сохранить путь и имя
* @param targetFile локальный целевой файл
* @return Возвращает путь сохранения
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight (int height, String savePath, File targetFile) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetFile);
int [] size = getSizeByHeight (высота, изображение);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>функция:</b> пропорционально масштабирует сетевые изображения в соответствии с фиксированной высотой.
*@authorhoojo
* @createDate 2012-2-7 10:52:23
* @param height фиксированная высота
* @param savePath сохранить путь и имя
* @param targetFile локальный целевой файл
* @return Возвращает путь сохранения
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight(int height, String savePath, URL targetURL) выдает ImageFormatException, IOException {
изображение = ImageIO.read(targetURL);
int [] size = getSizeByHeight (высота, изображение);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>функция:</b>
*@authorhoojo
* @createDate 2012-2-3 10:08:47
* @param аргументы
* @throwsIOException
* @throws MalformedURLException
* @throws ImageFormatException
*/
public static void main(String[] args) выдает ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, новый URL("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg")));
}
}
Я надеюсь, что эта статья будет полезна каждому, кто занимается программированием на Java.