• 图片压缩、编辑、剪切


    图片压缩、编辑、剪切。什么都不说了,直接上代码:
    “` 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);
      }
    

    }

  • 相关阅读:
    【转】十分钟了结MySQL information_schema
    【转】CentOS6.5下Redis安装与配置
    java知识点
    【转】STRING使用EQUALS方法和==分别比较的是什么
    【转】JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
    【转】mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
    【转】mybatis中的#和$的区别
    【转】HashMap
    【转】@Transactional事务几点注意
    关于PC端的密码框自动获取浏览器保存密码的问题[vue]
  • 原文地址:https://www.cnblogs.com/murphyyy/p/10002749.html
Copyright © 2020-2023  润新知