import java.awt.Graphics2D;
|
import java.awt.Image;
|
import java.awt.RenderingHints;
|
import java.awt.image.BufferedImage;
|
import java.awt.image.ConvolveOp;
|
import java.awt.image.Kernel;
|
import java.awt.MediaTracker;
|
import java.awt.Container;
|
import java.awt.Toolkit;
|
import java.io.File;
|
import java.io.FileNotFoundException;
|
import java.io.IOException;
|
import java.io.OutputStream;
|
import java.net.FileNameMap;
|
import java.net.URLConnection;
|
import javax.imageio.ImageIO;
|
import javax.imageio.ImageWriter;
|
import javax.imageio.ImageWriteParam;
|
import javax.imageio.stream.FileImageOutputStream;
|
import javax.imageio.IIOImage;
|
import java.lang.Integer;
|
|
/*
|
Java-Code zum Verkleinern von Bildern
|
|
args[0] - Anzahl Pixel an der laengsten Kante
|
args[1] - qualitaet JPEG, z.B. 75 fuer 75%
|
args[2] - Eingangsordner
|
args[3] - Ausgabeordner
|
*/
|
|
FileNameMap fileNameMap = URLConnection.getFileNameMap();
|
int width = Integer.parseInt(args[0]);
|
int height = width;
|
String inDirName = args[2];
|
String outDirName = args[3];
|
File inFile = new File(inDirName);
|
File[] fileList = inFile.listFiles();
|
if(fileList != null && fileList.length > 0) {
|
for(int i = 0; i < fileList.length; i++) {
|
System.out.println(fileList[i].getAbsolutePath());
|
|
File outDir = new File(outDirName);
|
File outFile = new File(outDir, fileList[i].getName());
|
System.out.println(outFile.getAbsolutePath());
|
Image image = ImageIO.read(fileList[i]);
|
MediaTracker mediaTracker = new MediaTracker(new Container());
|
mediaTracker.addImage(image, 0);
|
try {
|
mediaTracker.waitForID(0);
|
if (!mediaTracker.isErrorAny()) {
|
|
float quality = Float.parseFloat(args[1]);
|
float factor = (float) 0.0;
|
|
BufferedImage thumbImage;
|
int imageWidth = image.getWidth(null);
|
int imageHeight = image.getHeight(null);
|
int thumbWidth = width;
|
int thumbHeight = height;
|
if(imageWidth < width) {
|
thumbWidth = imageWidth;
|
}
|
if(imageHeight < height) {
|
thumbHeight = imageHeight;
|
}
|
double thumbRatio = (double)thumbWidth / (double)thumbHeight;
|
double imageRatio = (double)imageWidth / (double)imageHeight;
|
if (thumbRatio < imageRatio) {
|
thumbHeight = (int)(thumbWidth / imageRatio);
|
}
|
else {
|
thumbWidth = (int)(thumbHeight * imageRatio);
|
}
|
|
String mimeType = fileNameMap.getContentTypeFor("file://" + fileList[i].getAbsolutePath());
|
|
// draw original image to thumbnail image object and
|
// scale it to the new size on-the-fly
|
if(mimeType.contains("jpeg") || mimeType.contains("png")) {
|
thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB);
|
} else {
|
thumbImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_ARGB);
|
}
|
Graphics2D graphics2D = thumbImage.createGraphics();
|
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
|
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
|
|
// 30.7.2007: sharpening hinzugefuegt (Anfang)
|
//float factor = -0.15f; // minus = sharpen, plus = soften
|
//float[] sharpenArray = {0, -1, 0, -1, 5, -1, 0, -1, 0};
|
/*
|
30.6.2013: sharpening als Weichmacher nur, wenn Bild < 400
|
*/
|
/*if(thumbWidth < 400 || thumbHeight < 400) {
|
factor = 0.1f;
|
}*/
|
|
if(factor != (float) 0.0) {
|
//float[] array = {0, factor, 0, factor, 1-(factor*4), factor, 0, factor, 0};
|
float[] array = new float[9];
|
array[0] = 0;
|
array[1] = factor;
|
array[2] = 0;
|
array[3] = factor;
|
array[4] = 1-(factor*4);
|
array[5] = factor;
|
array[6] = 0;
|
array[7] = factor;
|
array[8] = 0;
|
Kernel kernel = new Kernel(3, 3, array);
|
ConvolveOp cOp = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null);
|
thumbImage = cOp.filter(thumbImage, null);
|
}
|
// 30.7.2007: sharpening hinzugefuegt (Ende)
|
|
String imgType;
|
if(mimeType.contains("jpg")) {
|
imgType = "jpg";
|
} else if(mimeType.contains("jpeg")) {
|
imgType = "jpg";
|
} else if(mimeType.contains("png")) {
|
imgType = "png";
|
} else if(mimeType.contains("gif")) {
|
imgType = "gif";
|
} else {
|
imgType = "jpg";
|
}
|
|
//ImageIO.write(thumbImage, imgType, outFile);
|
|
/* 14.1.2018 Beginn */
|
//File outfile =new File(“/opt/images/modified.jpg”);
|
ImageWriter writer = ImageIO.getImageWritersByFormatName(imgType).next();
|
//ImageWriter writer = iter.next();
|
ImageWriteParam iwp = writer.getDefaultWriteParam();
|
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
iwp.setCompressionQuality(quality);
|
writer.setOutput(new FileImageOutputStream(outFile));
|
writer.write(null, new IIOImage(thumbImage, null, null),iwp);
|
writer.dispose();
|
/* 14.1.2018 Ende */
|
|
|
}
|
} catch (InterruptedException ex) {
|
System.out.println("Error: " + ex.getLocalizedMessage());
|
}
|
|
}
|
} else {
|
System.out.println("fileList is null or empty");
|
}
|