返回顶部

收藏

Java图片处理工具类

更多
    import java.io.*;  
    import java.util.Date;  
    import java.awt.*;  
    import java.awt.image.*;  
    import javax.imageio.ImageIO;  
    import com.sun.image.codec.jpeg.*;  

    /** 
     * 图片压缩处理 
     *  
     * @author kuang hj 
     */  
    public class ImgCompressUtils  
    {  
        // 图片对象  
        private Image img;  

        // 原图的宽度  
        private int width;  

        // 原图的高度  
        private int height;  

        private static BufferedImage image;  

        @SuppressWarnings("deprecation")  
        public static void main(String[] args)  
            throws Exception  
        {  
            System.out.println("开始:" + new Date().toLocaleString());  
            ImgCompressUtils imgCom = new ImgCompressUtils("D:\\jjj.jpg");  
            // 处理图片得到 image  
            imgCom.resizeFix(80, 80);  
            // 输出结果文件  
            outputNewFile("D:\\result.jpg", image);  
            System.out.println("结束:" + new Date().toLocaleString());  
        }  

        /** 
         * 构造函数 取到需要处理的图片,得到宽 和 高 
         */  
        public ImgCompressUtils(String fileName)  
            throws IOException  
        {  
            File file = new File(fileName);// 读入文件  
            img = ImageIO.read(file); // 构造Image对象  
            width = img.getWidth(null); // 得到源图宽  
            height = img.getHeight(null); // 得到源图长  
        }  

        /** 
         * 按照宽度还是高度进行压缩 
         *  
         * @param destwidth int 最大宽度 
         * @param destheight int 最大高度 
         */  
        public void resizeFix(int destwidth, int destheight)  
            throws IOException  
        {  
            if (width / height > destwidth / destheight)  
            {  
                resizeByWidth(destwidth);  
            }  
            else  
            {  
                resizeByHeight(destheight);  
            }  
        }  

        /** 
         * 以宽度为基准,等比例放缩图片 
         *  
         * @param destwidth int 新宽度 
         */  
        public void resizeByWidth(int destwidth)  
            throws IOException  
        {  
            int tmph = (int)(height * destwidth / width);  
            resize(destwidth, tmph);  
        }  

        /** 
         * 以高度为基准,等比例缩放图片 
         *  
         * @param destheight int 新高度 
         */  
        public void resizeByHeight(int destheight)  
            throws IOException  
        {  
            int tmpw = (int)(width * destheight / height);  
            resize(tmpw, destheight);  
        }  

        /** 
         * 强制压缩/放大图片到固定的大小 
         *  
         * @param w int 新宽度 
         * @param h int 新高度 
         */  
        public BufferedImage resize(int destwidth, int destheight)  
        {  
            // SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的 优先级比速度高 生成的图片质量比较好 但速度慢  
            image = new BufferedImage(destwidth, destheight, BufferedImage.TYPE_INT_RGB);  

            // 绘制缩小后的图  
            image.getGraphics().drawImage(img, 0, 0, destwidth, destheight, null);  

            return image;  
        }  

        /** 
         * 新生成的压缩文件 <一句话功能简述> <功能详细描述> 
         *  
         * @param path 
         * @param image 
         * @see [类、类#方法、类#成员] 
         */  
        public static void outputNewFile(String path, BufferedImage image)  
        {  
            try  
            {  
                File destFile = new File(path);  
                FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流  
                // 可以正常实现bmp、png、gif转jpg  
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
                encoder.encode(image); // JPEG编码  
                out.close();  
            }  
            catch (Exception e)  
            {  
                e.printStackTrace();  
            }  
        }  
    }  

标签:java

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. astron 发表 2018-05-21 12:21:44 《JDK10新特性官方文档》从JDK10中移除javah工具
  2. darida 发表 2018-05-21 10:55:17 购物车模块
  3. darida 发表 2018-05-21 11:12:28 Java线程池深入理解
  4. yeseng 发表 2018-05-21 11:14:28 Java并发系列 — CAS
  5. hellas 发表 2018-05-21 12:13:24 使用 Spring Data 以 Redis 作为数据存储来构建应用
  6. 尖兵 发表 2018-05-21 15:50:11 Spring Boot 1.X和2.X优雅重启实战
  7. 尖兵 发表 2018-05-21 15:50:11 Spring Boot 1.X和2.X优雅重启实战
  8. xubiao.zhuang 发表 2018-05-20 10:05:09 上传 Java 库到 Maven central repository
  9. puefu.he 发表 2018-05-20 10:05:09 Spring技术内幕:设计理念和整体架构概述
  10. wenming.gapo 发表 2018-05-20 10:08:09 Java效率工具之Lombok
  11. hanze 发表 2018-05-20 11:05:43 随想录(对比着c学java)
  12. hanze 发表 2018-05-20 11:05:43 随想录(对比着c学java)

发表评论