tweaks to improve image quality
This commit is contained in:
parent
e9225054b4
commit
c018eba9a2
1 changed files with 25 additions and 2 deletions
|
|
@ -1,15 +1,21 @@
|
|||
package org.forkalsrud.album.web;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.image.AffineTransformOp;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.imageio.IIOImage;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.imageio.ImageReadParam;
|
||||
import javax.imageio.ImageReader;
|
||||
import javax.imageio.ImageTypeSpecifier;
|
||||
import javax.imageio.ImageWriteParam;
|
||||
import javax.imageio.ImageWriter;
|
||||
import javax.imageio.stream.ImageInputStream;
|
||||
import javax.imageio.stream.ImageOutputStream;
|
||||
|
|
@ -152,6 +158,7 @@ public class AlbumServlet
|
|||
ImageInputStream iis = ImageIO.createImageInputStream(file);
|
||||
reader.setInput(iis, true);
|
||||
ImageReadParam param = reader.getDefaultReadParam();
|
||||
// param.setDestinationType(ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_ARGB));
|
||||
if (false /* subsampling */) {
|
||||
double subSampleScale = (double)outd.getWidth() / orig.getWidth();
|
||||
int subSampling = (int)Math.floor(0.25d/subSampleScale);
|
||||
|
|
@ -175,16 +182,32 @@ public class AlbumServlet
|
|||
scale = (double)outd.getWidth() / img.getWidth();
|
||||
xform = AffineTransform.getScaleInstance(scale, scale);
|
||||
}
|
||||
// AffineTransformOp operation = new AffineTransformOp(xform, AffineTransformOp.TYPE_BICUBIC);
|
||||
// BufferedImage buf2 = operation.createCompatibleDestImage(img, img.getColorModel());
|
||||
BufferedImage buf2 = new BufferedImage(outd.getWidth(), outd.getHeight(), img.getType());
|
||||
|
||||
// operation.filter(img, buf2);
|
||||
|
||||
Graphics2D g2 = buf2.createGraphics();
|
||||
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
|
||||
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
|
||||
g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
|
||||
g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
|
||||
|
||||
g2.transform(xform);
|
||||
g2.drawImage(img, 0, 0, null);
|
||||
|
||||
// g2.drawImage(img, operation, 0, 0);
|
||||
|
||||
|
||||
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
|
||||
ImageWriter writer = writers.next();
|
||||
ImageWriteParam wParam = writer.getDefaultWriteParam();
|
||||
wParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
|
||||
wParam.setCompressionQuality(1.0f);
|
||||
ImageOutputStream ios = ImageIO.createImageOutputStream(res.getOutputStream());
|
||||
writer.setOutput(ios);
|
||||
writer.write(buf2);
|
||||
writer.write(null, new IIOImage(buf2, null, null), wParam);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue