直接上代码:java
package com.yx.test.image; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; /** * ImageUtil * * @author yx * @date 2019/12/10 9:22 */ public class ImageUtil { public static void main(String[] args) { reSize(new File("F:\\temp\\1\\qrcode_258_258.jpg"), new File("F:\\temp\\2\\320_320.jpg"), 320, 320, true); reSize(new File("F:\\temp\\1\\qrcode_258_258.jpg"), new File("F:\\temp\\2\\320_340.jpg"), 320, 340, false); } /** * @param srcImg 原图片 * @param destImg 目标位置 * @param width 指望宽 * @param height 指望高 * @param equalScale 是否等比例缩放 */ public static void reSize(File srcImg, File destImg, int width, int height, boolean equalScale) { String type = getImageType(srcImg); if (type == null) { return; } if (width < 0 || height < 0) { return; } BufferedImage srcImage = null; try { srcImage = ImageIO.read(srcImg); System.out.println("srcImg size=" + srcImage.getWidth() + "X" + srcImage.getHeight()); } catch (IOException e) { e.printStackTrace(); return; } if (srcImage != null) { // targetW,targetH分别表示目标长和宽 BufferedImage target = null; double sx = (double) width / srcImage.getWidth(); double sy = (double) height / srcImage.getHeight(); // 等比缩放 if (equalScale) { if (sx > sy) { sx = sy; width = (int) (sx * srcImage.getWidth()); } else { sy = sx; height = (int) (sy * srcImage.getHeight()); } } System.out.println("destImg size=" + width + "X" + height); ColorModel cm = srcImage.getColorModel(); WritableRaster raster = cm.createCompatibleWritableRaster(width, height); boolean alphaPremultiplied = cm.isAlphaPremultiplied(); target = new BufferedImage(cm, raster, alphaPremultiplied, null); Graphics2D g = target.createGraphics(); // smoother than exlax: g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.drawRenderedImage(srcImage, AffineTransform.getScaleInstance(sx, sy)); g.dispose(); // 将转换后的图片保存 try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(target, type, baos); FileOutputStream fos = new FileOutputStream(destImg); fos.write(baos.toByteArray()); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 获取文件后缀不带. * * @param file 文件后缀名 * @return */ private static String getImageType(File file) { if (file != null && file.exists() && file.isFile()) { String fileName = file.getName(); int index = fileName.lastIndexOf("."); if (index != -1 && index < fileName.length() - 1) { return fileName.substring(index + 1); } } return null; } }
运行效果:code
srcImg size=258X258
destImg size=320X320
srcImg size=258X258
destImg size=320X340orm