JAVA图片裁剪缩放

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]:

相关阅读