图片压缩、编辑、剪切

来源:互联网 发布:做java培训讲师怎么样 编辑:程序博客网 时间:2024/04/30 18:16

图片压缩、编辑、剪切。什么都不说了,直接上代码:
“` python
package com.smartdoer.utils;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
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.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.multipart.MultipartFile;

public class ImgEditor {

/**    * 改变图片尺寸    * @param srcFileName 源图片路径    * @param tagFileName 目的图片路径    * @param width 修改后的宽度    * @param height 修改后的高度    */  public void zoomImage(String srcFileName,String tagFileName,int width,int height){       try {      BufferedImage bi = ImageIO.read(new File(srcFileName));      BufferedImage tag=new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);      tag.getGraphics().drawImage(bi, 0, 0, width, height, null);      ImageIO.write(tag, "jpg", new File(tagFileName));//画图      } catch (IOException e) {      e.printStackTrace();      }   }   /**    * 缩放图像(按高度和宽度缩放)    * @param srcImageFile 源图像文件地址    * @param result 缩放后的图像地址    * @param height 缩放后的高度    * @param width 缩放后的宽度    * @param bb 比例不对时是否需要补白:true为补白; false为不补白;    */  public void scale(String srcImageFile, String result, int height, int width, boolean bb) {     try {       double ratio = 0.0; // 缩放比例       File f = new File(srcImageFile);       BufferedImage bi = ImageIO.read(f);       Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH);       // 计算比例       if ((bi.getHeight() > height) || (bi.getWidth() > width)) {         if (bi.getHeight() > bi.getWidth()) {           ratio = (new Integer(height)).doubleValue()               / bi.getHeight();         } else {           ratio = (new Integer(width)).doubleValue() / bi.getWidth();         }         AffineTransformOp op = new AffineTransformOp(AffineTransform             .getScaleInstance(ratio, ratio), null);         itemp = op.filter(bi, null);       }       if (bb) {//补白         BufferedImage image = new BufferedImage(width, height,             BufferedImage.TYPE_INT_RGB);         Graphics2D g = image.createGraphics();         g.setColor(Color.white);         g.fillRect(0, 0, width, height);         if (width == itemp.getWidth(null))           g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,               itemp.getWidth(null), itemp.getHeight(null),               Color.white, null);         else          g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,               itemp.getWidth(null), itemp.getHeight(null),               Color.white, null);         g.dispose();         itemp = image;       }       ImageIO.write((BufferedImage) itemp, "JPEG", new File(result));     } catch (IOException e) {       e.printStackTrace();     }   }   /**    * 图像切割(按指定起点坐标和宽高切割)    * @param srcImageFile 源图像地址    * @param result 切片后的图像地址    * @param x 目标切片起点坐标X    * @param y 目标切片起点坐标Y    * @param width 目标切片宽度    * @param height 目标切片高度    */  public void cut(String srcImageFile, String result,       int x, int y, int width, int height) {     try {       // 读取源图像       BufferedImage bi = ImageIO.read(new File(srcImageFile));       int srcWidth = bi.getHeight(); // 源图宽度       int srcHeight = bi.getWidth(); // 源图高度       if (srcWidth > 0 && srcHeight > 0) {         Image image = bi.getScaledInstance(srcWidth, srcHeight,             Image.SCALE_DEFAULT);         // 四个参数分别为图像起点坐标和宽高         // 即: CropImageFilter(int x,int y,int width,int height)         ImageFilter cropFilter = new CropImageFilter(x, y, width, height);         Image img = Toolkit.getDefaultToolkit().createImage(             new FilteredImageSource(image.getSource(),                 cropFilter));         BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);         Graphics g = tag.getGraphics();         g.drawImage(img, 0, 0, width, height, null); // 绘制切割后的图         g.dispose();         // 输出为文件         ImageIO.write(tag, "JPEG", new File(result));       }     } catch (Exception e) {       e.printStackTrace();     }   }   /**     * 图片裁剪     * @param srcImageFile 图片裁剪地址     * @param result 图片输出文件夹     * @param destWidth 图片裁剪宽度     * @param destHeight 图片裁剪高度     */    @SuppressWarnings("rawtypes")    public void cutImage(String srcImageFile, String result,           int x,int y, int destWidth, int destHeight) {        try {            Iterator iterator = ImageIO.getImageReadersByFormatName("JPEG");/*PNG,BMP*/               ImageReader reader = (ImageReader)iterator.next();/*获取图片尺寸*/            InputStream inputStream = new FileInputStream(srcImageFile);              ImageInputStream iis = ImageIO.createImageInputStream(inputStream);               reader.setInput(iis, true);               ImageReadParam param = reader.getDefaultReadParam();               Rectangle rectangle = new Rectangle(x,y, destWidth, destHeight);/*指定截取范围*/                param.setSourceRegion(rectangle);               BufferedImage bi = reader.read(0,param);             ImageIO.write(bi, "JPEG", new File(result));        } catch (Exception e) {            e.printStackTrace();        }    }  //获得文件名字   public String getFileName(MultipartFile file, HttpServletRequest request,HttpSession session){     String FILE_PATH = session.getServletContext().getRealPath("/") + "upload";     String fileName = file.getOriginalFilename();      String[] suffixNameArr = fileName.split("\\.");     String suffixName = suffixNameArr[suffixNameArr.length-1];     String userName = SecurityContextHolder.getContext().getAuthentication().getName();     return getTime() + userName+"."+suffixName;   }   //文件上传,返回文件路径   public String uploadFile(MultipartFile file, HttpServletRequest request,HttpSession session) throws IOException {     String FILE_PATH = session.getServletContext().getRealPath("/") + "upload";     String fileName = getFileName(file,request,session);     File tempFile = new File(FILE_PATH, fileName);      if (!tempFile.getParentFile().exists()) {        tempFile.getParentFile().mkdir();      }      if (!tempFile.exists()) {        tempFile.createNewFile();      }      file.transferTo(tempFile); //将上传文件写到服务器上指定的文件。     return FILE_PATH + "\\" + tempFile.getName();    }    /* public static File getFile(String fileName) {      return new File(FILE_PATH, fileName);    } */   public String getTime(){     Date date = new Date();     SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式     String nowTime = df.format(date).toString();     return nowTime;   }   public static void main(String[] args){      ImgEditor id = new ImgEditor();      id.cut("E:\\photo\\IMG_20161223_722039.jpg", "E:\\photo\\cated.jpg",0,0, 266, 266);  }

}

0 0
原创粉丝点击