java上传图片放大(小图等比放大,大图等比裁剪)
jopen
10年前
java上传图片放大(小图等比放大,大图等比裁剪):
import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 上传图片-小图片放大图片不变型,但会模糊(取决于图片本身的像素) * * @author sunlight * */ public class AmplificationImage { /** * 判断图片是否大于目标尺寸 * * @param srcPath * @param maxWidth * @param maxHeight * @return */ public static boolean isBigImage(String srcPath, int maxWidth, int maxHeight) { BufferedImage bufferedImage = null; try { File of = new File(srcPath); if (of.canRead()) { bufferedImage = ImageIO.read(of); } } catch (Exception e) { return false; } if (bufferedImage != null) { int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); if (width > maxWidth && height > maxHeight) { return true; } } return false; } /** * 图片放大的方法(不会变色) * @param inputUrl 图片输入路劲 * @param outputUrl 图片输出路劲 * @param maxWidth 目标宽 * @param maxHeight 目标高 * @param proportion 是否等比缩放 * @return */ public static boolean zoomPicture(String inputUrl, String outputUrl, int maxWidth, int maxHeight, boolean proportion) { try { // 获得源文件 File file = new File(inputUrl); if (!file.exists()) { return false; } Image img = ImageIO.read(file); // 判断图片格式是否正确 if (img.getWidth(null) == -1) { return false; } else { int newWidth; int newHeight; // 判断是否是等比缩放 if (proportion == true) { // 为等比缩放计算输出的图片宽度及高度 double rate1 = ((double) img.getWidth(null)) / (double) maxWidth; double rate2 = ((double) img.getHeight(null)) / (double) maxHeight; // 根据缩放比率大的进行缩放控制 double rate = rate1 > rate2 ? rate2 : rate1; newWidth = (int) (((double) img.getWidth(null)) / rate); newHeight = (int) (((double) img.getHeight(null)) / rate); } else { newWidth = maxWidth; // 输出的图片宽度 newHeight = maxHeight; // 输出的图片高度 } BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage( img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null); FileOutputStream out = new FileOutputStream(outputUrl); // JPEGImageEncoder可适用于其他图片类型的转换 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(tag); out.close(); } } catch (Exception e) { e.printStackTrace(); } return true; } /** * 对图片进行放大(部分图片会变红) * @param srcPath * 原始图片路径(绝对路径) * @param newPath * 放大后图片路径(绝对路径) * @param times * 放大倍数 * @return 是否放大成功 */ public static boolean zoomInImage(String srcPath, String newPath, int maxWidth, int maxHeight) { BufferedImage bufferedImage = null; try { File of = new File(srcPath); if (of.canRead()) { bufferedImage = ImageIO.read(of); } } catch (IOException e) { // TODO: 打印日志 return false; } if (bufferedImage != null) { bufferedImage = zoomInImage(bufferedImage, maxWidth, maxHeight); try { // TODO: 这个保存路径需要配置下子好一点 ImageIO.write(bufferedImage, "JPG", new File(newPath)); // 保存修改后的图像,全部保存为JPG格式 } catch (IOException e) { // TODO 打印错误信息 return false; } } return true; } /** * 对图片进行放大 * * @param originalImage * 原始图片 * @param maxWidth * 目标宽度 * @param maxHeight * 目标高度 * @return */ private static BufferedImage zoomInImage(BufferedImage originalImage, int maxWidth, int maxHeight) { int times = 1; // 放大倍数 int width = originalImage.getWidth(); int height = originalImage.getHeight(); double sw = (maxWidth * 1.0) / (width * 1.0); double sh = (maxHeight * 1.0) / (height * 1.0); if (width > maxWidth && height > maxHeight) { return originalImage; } else if (width < maxWidth && height < maxHeight) { if (sw > sh) { times = (int) (sw + 0.8); } else { times = (int) (sh + 0.8); } } else if (width < maxWidth && height > maxHeight) { times = (int) (sw + 0.8); } else { times = (int) (sh + 0.8); } int lastW = times * width; int lastH = times * height; BufferedImage newImage = new BufferedImage(lastW, lastH, originalImage .getType()); Graphics g = newImage.getGraphics(); g.drawImage(originalImage, 0, 0, lastW, lastH, null); g.dispose(); return newImage; } }