Код сжатия изображений Java
Скопируйте код кода следующим образом:
пакет com.img;
импортировать java.awt.Image;
импортировать java.awt.image.BufferedImage;
импортировать java.io.File;
импортировать java.io.FileOutputStream;
импортировать java.io.IOException;
импортировать javax.imageio.ImageIO;
импортировать com.sun.image.codec.jpeg.JPEGCodec;
импортировать com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author Кола с сахаром
*/
общественный класс CompressPicDemo {
частный файл file = null // объект файла;
частная строка inputDir // Путь к входной карте;
Private String outputDir // Путь к выходному графу;
частная строка inputFileName //имя входного файла изображения;
Private String outputFileName // Имя файла выходного изображения;
Private int outputWidth = 100 // Ширина выходного изображения по умолчанию;
Private int outputHeight = 100 //Высота выходного изображения по умолчанию;
частная логическая пропорция = true // Пропорционально ли масштабировать отметку (по умолчанию пропорциональное масштабирование)
public CompressPicDemo() { //Инициализируем переменные
ВходнойДир = "";
ВыходнойДир = "";
имя_входного_файла = "";
имя_выходного_файла = "";
выходная ширина = 100;
выходная высота = 100;
}
общественный недействительный setInputDir (String inputDir) {
this.inputDir = inputDir;
}
public void setOutputDir (String outputDir) {
this.outputDir = outputDir;
}
public void setInputFileName (String inputFileName) {
this.inputFileName = inputFileName;
}
public void setOutputFileName (String outputFileName) {
this.outputFileName = outputFileName;
}
public void setOutputWidth (int outputWidth) {
this.outputWidth = выходная ширина;
}
public void setOutputHeight(int outputHeight) {
this.outputHeight = outputHeight;
}
public void setWidthAndHeight(int width, int height) {
this.outputWidth = ширина;
this.outputHeight = высота;
}
/*
* Получить размер изображения
* Передайте параметр String path: путь к изображению.
*/
public long getPicSize(String path) {
файл = новый файл (путь);
вернуть файл.длина();
}
//Обработка изображения
публичная строка compressPic() {
пытаться {
//Получаем исходный файл
файл = новый файл (inputDir + inputFileName);
если (!file.exists()) {
возвращаться "";
}
Изображение img = ImageIO.read(файл);
// Определяем, правильный ли формат изображения
если (img.getWidth(null) == -1) {
System.out.println("Невозможно прочитать, повторите попытку!" + "<BR>");
вернуть «нет»;
} еще {
интервал новой ширины; интервал новой высоты;
// Определяем, пропорциональное ли это масштабирование
если (this.proportion == true) {
// Вычисляем ширину и высоту выходного изображения для пропорционального масштабирования
двойная скорость1 = ((double) img.getWidth(null)) / (double) outputWidth + 0,1;
двойная скорость2 = ((двойной) img.getHeight(null)) / (двойной) выходной Height + 0,1;
// Выполняем управление масштабированием на основе большего коэффициента масштабирования
двойная ставка = ставка1 > ставка2 ? ставка1: ставка2;
newWidth = (int) (((double) img.getWidth(null)) / скорость);
newHeight = (int) (((double) img.getHeight(null))/rate);
} еще {
newWidth = img.getWidth(null); // Ширина выходного изображения
newHeight = img.getHeight(null); // Высота выходного изображения
}
Тег BufferedImage = новый BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
/*
* Алгоритм миниатюр Image.SCALE_SMOOTH обеспечивает плавность миниатюр изображений.
* Приоритет выше скорости. Качество создаваемых изображений лучше, но скорость медленная.
*/
tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream out = новый FileOutputStream (outputDir + outputFileName);
// JPEGImageEncoder можно применять для преобразования других типов изображений
Кодер JPEGImageEncoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(тег);
выход.закрыть();
}
} catch (IOException ex) {
ex.printStackTrace();
}
вернуть «ок»;
}
public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {
//Входной путь к изображению
this.inputDir = inputDir;
//Путь выходного графа
this.outputDir = outputDir;
// Введите имя файла изображения
this.inputFileName = inputFileName;
// Имя файла выходного изображения
this.outputFileName = outputFileName;
вернуть сжатиеPic();
}
public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName, ширина int, высота int, логическое значение gp) {
//Входной путь к изображению
this.inputDir = inputDir;
//Путь выходного графа
this.outputDir = outputDir;
// Введите имя файла изображения
this.inputFileName = inputFileName;
// Имя файла выходного изображения
this.outputFileName = outputFileName;
//Устанавливаем длину и ширину изображения
setWidthAndHeight (ширина, высота);
// Является ли это знаком пропорционального масштабирования
this.proportion = gp;
вернуть сжатиеPic();
}
// основной тест
// compressPic (путь к большому изображению, создание пути к маленькому изображению, имя файла большого изображения, создание текстового имени маленького изображения, создание маленькой ширины изображения, создание маленькой высоты изображения, пропорциональное масштабирование (по умолчанию — true))
public static void main(String[] arg) {
CompressPicDemo mypic = новый CompressPicDemo();
System.out.println("Размер входного изображения: " + mypic.getPicSize("e://1.jpg")/1024 + "КБ");
mypic.compressPic("e://", "e://test//", "1.jpg", "r1.jpg", 120, 120, false);
}
}