美文网首页JavaEEIT学习程序员
java善假于物(四):生成缩略图

java善假于物(四):生成缩略图

作者: 大黄蜂coder | 来源:发表于2016-12-28 17:38 被阅读322次

    介绍

    我们先看一下效果:

    最终效果

    我们开发中经常遇到这样的业务需求,比如用户上传一张大头像,但是不是所有展示页面我们都给用户看到那张大图,那样会降低加载速度,影响用户体验,而且浪费流量,那我们要怎么做才能生成缩略图呢?

    开源地址:https://github.com/bigbeef
    个人博客:http://blog.cppba.com

    1.创建缩略图生成工具类ImgCompressUtil .java(核心)

    package com.cppba.core.util;
    
    import javax.imageio.ImageIO;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /** 
     * 图片压缩处理 
     * @author 大黄蜂coder
     */ 
    public class ImgCompressUtil {
        
        
        /**
         * 强制压缩/放大图片到固定的大小 
         * @param fileName 压缩文件("c:\\1.png")
         * @param compressPercent 压缩比例(压缩为原来一半传0.5)
         * @return
         */
        public static BufferedImage resize(String fileName,double compressPercent){
            BufferedImage img = null;//原图
            BufferedImage compressImg = null;//压缩后图
            int width,height;
            try {
            File file = new File(fileName);
            img = ImageIO.read(file);
            width = (int)(img.getWidth()*compressPercent);
            height = (int)(img.getHeight()*compressPercent);
            compressImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB );         
            compressImg.getGraphics().drawImage(img, 0, 0, width, height, null); // 绘制缩小后的图  
            } catch (IOException e) {
                e.printStackTrace();
            }
            return compressImg;
        }
        
        /**
         * 
         * @param file 存放位置("c:\\1.png")
         * @param img
         */
        public static void writeToFile(String file,BufferedImage img){
            try {
                File destFile = new File(file);
                FileOutputStream out = new FileOutputStream(destFile); // 输出到文件流
                ImageIO.write(img, "png", out);
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    2.测试类ImgCompress.java

    package com.cppba.main;
    
    import com.cppba.core.util.ImgCompressUtil;
    
    import java.awt.image.BufferedImage;
    
    public class ImgCompress {
    
        public static void main(String[] args) {
            String fileName = "f:\\ImgTest\\bg.jpg";
    
            BufferedImage bufferedImage = ImgCompressUtil.resize(fileName, 0.5);
            ImgCompressUtil.writeToFile(fileName+"_middle.png", bufferedImage);
    
            BufferedImage img = ImgCompressUtil.resize(fileName, 0.25);
            ImgCompressUtil.writeToFile(fileName+"_small.png", img);
        }
    
    }
    
    

    3.运行结果

    缩略图生成

    生成成功!我这里用了一个技巧,中型缩略图和小型缩略图直接改他们的后缀名,这样用起来也非常方便,要某张图的缩略图,直接跟个后缀就可以了,当然大家可以根据自己的业务需求修改源代码,生成自己想要的大小!

    相关文章

      网友评论

        本文标题:java善假于物(四):生成缩略图

        本文链接:https://www.haomeiwen.com/subject/ojnyvttx.html