java上传图片放大(小图等比放大,大图等比裁剪)

来源:互联网 发布:程序员大神 编辑:程序博客网 时间:2024/05/16 05:30
java上传图片放大(小图等比放大,大图等比裁剪):
package oms.util;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;}}

0 0