| 2018.5.19 | java |
ImageConverter.java
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageConverter {
public static void resizeImage(String srcImageFile, String destImageFile, int destWidth, int destHeight) throws IOException {
Image img;
ImageFilter cropFilter;
BufferedImage bi = ImageIO.read(new File(srcImageFile));
int srcWidth = bi.getWidth();
int srcHeight = bi.getHeight();
int x = 0;
int y = 0;
if (srcWidth >= 95 && srcWidth <= 115 && srcHeight >= 110 && srcHeight <= 150) {
Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT);
x = (srcWidth - destWidth) / 2;
y = (srcHeight - destHeight) / 2;
cropFilter = new CropImageFilter(x, y, destWidth, destHeight);
img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB);
Graphics g1 = tag.getGraphics();
Graphics2D g = (Graphics2D) g1;
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(img, 0, 0, null);
g.dispose();
ImageIO.write(tag, "png", new File(destImageFile));
} else {
createThumb(srcImageFile, destImageFile, destWidth, destHeight);
}
}
public static void createThumb(String srcImgPath, String destImgPath, int destImgW, int destImgH) throws IOException {
int narrowImgW;
int narrowImgH;
int srcImgW;
int srcImgH;
BufferedImage bi = ImageIO.read(new File(srcImgPath));
srcImgW = bi.getWidth();
srcImgH = bi.getHeight();
if (srcImgW < destImgW && srcImgH < destImgH) {
ImageIO.write(bi, "JPEG", new File(destImgPath));
return;
}
if ((float) srcImgW / srcImgH > (float) destImgW / destImgH) {
narrowImgW = (int) (((float) destImgH / (float) srcImgH) * srcImgW);
narrowImgH = destImgH;
int cutNarrowImgSize = (narrowImgW - destImgW) / 2;
BufferedImage narrowImg = new BufferedImage(narrowImgW, narrowImgH, BufferedImage.TYPE_INT_RGB);
narrowImg.getGraphics().drawImage(bi.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_SMOOTH), 0, 0, null);
Image image = narrowImg.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_DEFAULT);
CropImageFilter cropFilter = new CropImageFilter(cutNarrowImgSize, 0, narrowImgW - cutNarrowImgSize, narrowImgH);
Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage cutLiftNarrowImg = new BufferedImage(narrowImgW - cutNarrowImgSize, narrowImgH, BufferedImage.TYPE_INT_RGB);
cutLiftNarrowImg.getGraphics().drawImage(img, 0, 0, null);
image = cutLiftNarrowImg.getScaledInstance(narrowImgW - cutNarrowImgSize, narrowImgH, Image.SCALE_DEFAULT);
cropFilter = new CropImageFilter(0, 0, narrowImgW - cutNarrowImgSize * 2, narrowImgH);
img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage cutRightNarrowImg = new BufferedImage(narrowImgW - cutNarrowImgSize * 2, narrowImgH, BufferedImage.TYPE_INT_RGB);
Graphics g = cutRightNarrowImg.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ImageIO.write(cutRightNarrowImg, "JPEG", new File(destImgPath));
} else {
narrowImgW = destImgW;
narrowImgH = (int) (((float) destImgW / (float) srcImgW) * srcImgH);
int cutNarrowImgSize = (narrowImgH - destImgH) / 2;
BufferedImage narrowImg = new BufferedImage(narrowImgW, narrowImgH, BufferedImage.TYPE_INT_RGB);
narrowImg.getGraphics().drawImage(bi.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_SMOOTH), 0, 0, null);
Image image = narrowImg.getScaledInstance(narrowImgW, narrowImgH, Image.SCALE_DEFAULT);
CropImageFilter cropFilter = new CropImageFilter(0, cutNarrowImgSize, narrowImgW, narrowImgH - cutNarrowImgSize);
Image img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage cutTopNarrowImg = new BufferedImage(narrowImgW, narrowImgH - cutNarrowImgSize, BufferedImage.TYPE_INT_RGB);
cutTopNarrowImg.getGraphics().drawImage(img, 0, 0, null);
image = cutTopNarrowImg.getScaledInstance(narrowImgW, narrowImgH - cutNarrowImgSize, Image.SCALE_DEFAULT);
cropFilter = new CropImageFilter(0, 0, narrowImgW, narrowImgH - cutNarrowImgSize * 2);
img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
BufferedImage cutBottomNarrowImg = new BufferedImage(narrowImgW, narrowImgH - cutNarrowImgSize * 2, BufferedImage.TYPE_INT_RGB);
Graphics g = cutBottomNarrowImg.getGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
ImageIO.write(cutBottomNarrowImg, "JPEG", new File(destImgPath));
}
}
}
更新列表:
*
参考文章:
[4]: