制作缩率图 java压缩图片

2024-03-12 23:48
文章标签 java 图片 制作 压缩 缩率

本文主要是介绍制作缩率图 java压缩图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原因:在ie上打开30几张图片的时候发现整个页面很卡,后统计下每张图片24k,经过处理后每张可以是2k,这样第一次卡到的是缩率图,最后浏览的时候才是原图


第一步,先要有一个类,当然这个类我是从网上找的,感谢

package com.sunwave.util;
import java.awt.geom.AffineTransform;  
import java.awt.image.AffineTransformOp;  
import java.awt.image.BufferedImage;  
import java.io.File;  
import java.io.IOException;  
import java.util.Date;


import javax.imageio.ImageIO; 
import com.sunwave.util.JpegToolException; 
/**
 * 将jpg图片生成缩略图的方法
 * @author 
 * @date 2014-8-30下午9:23:10
 *
 */
public class JpegTool {


private boolean isInitFlag = false; //         对象是否己经初始化   
     private String pic_big_pathfilename = null; //定义源图片所在的带路径目录的文件名  
     private String pic_small_pathfilename = null; // 生成小图片的带存放路径目录的文件名   
     private int smallpicwidth = 0; //定义生成小图片的宽度和高度,给其一个就可以了   
     private int smallpicheight = 0;   
     private int pic_big_width=0;  
     private int pic_big_height=0;  
     private double picscale = 0; //定义小图片的相比原图片的比例   
     /**  
     * 构造函数  
     * @param 没有参数  
     */   
     public JpegTool(){  
             this.isInitFlag = false;   
     }   
     /**  
     * 私有函数,重置所有的参数  
     * @param 没有参数  
     * @return 没有返回参数  
     */   
     private void resetJpegToolParams(){   
             this.picscale = 0;   
             this.smallpicwidth = 0;   
             this.smallpicheight = 0;   
             this.isInitFlag = false;   
     }   
     /**  
     * @param scale 设置缩影图像相对于源图像的大小比例如 0.5  
     * @throws JpegToolException  
     */   
     public void SetScale(double scale) throws JpegToolException{   
             if(scale<=0){   
                             throw new JpegToolException(" 缩放比例不能为 0 和负数! ");   
             }   
             this.resetJpegToolParams();   
             this.picscale = scale;   
             this.isInitFlag = true;   
     }   
     /**  
     * @param smallpicwidth 设置缩影图像的宽度  
     * @throws JpegToolException  
     */   
     public void SetSmallWidth(int smallpicwidth) throws JpegToolException   
     {   
             if(smallpicwidth<=0)  
             {   
                     throw new JpegToolException(" 缩影图片的宽度不能为 0 和负数! ");   
             }   
             this.resetJpegToolParams();   
             this.smallpicwidth = smallpicwidth;   
             this.isInitFlag = true;   
     }   


     /**  
     * @param smallpicheight 设置缩影图像的高度  
     * @throws JpegToolException  
     */   


     public void SetSmallHeight(int smallpicheight) throws JpegToolException {   
             if(smallpicheight<=0)  
             {   
                throw new JpegToolException(" 缩影图片的高度不能为 0 和负数! ");   
             }   
             this.resetJpegToolParams();   
             this.smallpicheight = smallpicheight;   
             this.isInitFlag = true;   
     }   
       
     /** 
      *返回大图片路径  
      */  
     public String getpic_big_pathfilename()  
     {  
             return this.pic_big_pathfilename;  
     }  
     /** 
      * 返回小图片路径 
      */  
     public String getpic_small_pathfilename()  
     {  
             return this.pic_small_pathfilename;  
     }  
       
     public int getsrcw()  
     {  
             return this.pic_big_width;  
     }  
     public int getsrch()  
     {  
             return this.pic_big_height;  
     }  
     /**  
     * 生成源图像的缩影图像  
     * @param pic_big_pathfilename 源图像文件名,包含路径(如 windows 下 C:\\pic.jpg ; Linux 下 /home/abner/pic/pic.jpg )  
     * @param pic_small_pathfilename 生成的缩影图像文件名,包含路径(如 windows 下 C:\\pic_small.jpg ; Linux 下 /home/abner/pic/pic_small.jpg )  
     * @throws JpegToolException  
     */   
     public void doFinal(String pic_big_pathfilename,String pic_small_pathfilename) throws JpegToolException {   
             if(!this.isInitFlag){   
                 throw new JpegToolException(" 对象参数没有初始化! ");   
             }   
             if(pic_big_pathfilename==null || pic_small_pathfilename==null){   
                 throw new JpegToolException(" 包含文件名的路径为空! ");   
             }   
             if((!pic_big_pathfilename.toLowerCase().endsWith("jpg")) && (!pic_big_pathfilename.toLowerCase().endsWith("jpeg"))){   
                 throw new JpegToolException(" 只能处理 JPG/JPEG 文件! ");   
             }   
             if((!pic_small_pathfilename.toLowerCase().endsWith("jpg")) && !pic_small_pathfilename.toLowerCase().endsWith("jpeg")){   
                 throw new JpegToolException(" 只能处理 JPG/JPEG 文件! ");   
             }   
             this.pic_big_pathfilename=pic_big_pathfilename;  
             this.pic_small_pathfilename=pic_small_pathfilename;  
             int smallw = 0;   
             int smallh = 0;   
             // 新建源图片和生成的小图片的文件对象   
             File fi = new File(pic_big_pathfilename);   
             File fo = new File(pic_small_pathfilename);   
             //生成图像变换对象   
             AffineTransform transform = new AffineTransform();   
             //通过缓冲读入源图片文件   
             BufferedImage bsrc = null;   
             try {   
             bsrc = ImageIO.read(fi);   
             }catch (IOException ex) {   
                 throw new JpegToolException(" 读取源图像文件出错! ");   
             }   
             this.pic_big_width= bsrc.getWidth();// 原图像的长度   
             this.pic_big_height = bsrc.getHeight();// 原图像的宽度   
             double scale = (double)pic_big_width/pic_big_height;// 图像的长宽比例   
             if(this.smallpicwidth!=0)  
             {// 根据设定的宽度求出长度   
                     smallw = this.smallpicwidth;// 新生成的缩略图像的长度   
                     smallh = (smallw*pic_big_height)/pic_big_width ;// 新生成的缩略图像的宽度   
             }  
             else if(this.smallpicheight!=0)  
             {// 根据设定的长度求出宽度   
                     smallh = this.smallpicheight;// 新生成的缩略图像的长度   
                     smallw = (smallh*pic_big_width)/pic_big_height;// 新生成的缩略图像的宽度   
             }  
             else if(this.picscale!=0)  
             {// 根据设置的缩小比例设置图像的长和宽   
                     smallw = (int)((float)pic_big_width*this.picscale);   
                     smallh = (int)((float)pic_big_height*this.picscale);   
             }  
             else  
             {   
                 throw new JpegToolException(" 对象参数初始化不正确! ");   
             }  
             double sx = (double)smallw/pic_big_width;//小/大图像的宽度比例   
             double sy = (double)smallh/pic_big_height;//小/大图像的高度比例   
             transform.setToScale(sx,sy);// 设置图像转换的比例   
             //生成图像转换操作对象   
             AffineTransformOp ato = new AffineTransformOp(transform,null);   
             //生成缩小图像的缓冲对象   
             BufferedImage bsmall = new BufferedImage(smallw,smallh,BufferedImage.TYPE_3BYTE_BGR);   
             //生成小图像   
             ato.filter(bsrc,bsmall);   
             //输出小图像   
             try{  
                     ImageIO.write(bsmall, "jpeg", fo);   
             }  
             catch (IOException ex1)   
             {   
                throw new JpegToolException(" 写入缩略图像文件出错! ");   
             }   
     }  
     /**
      * 测试
      * @param args
      */
     public static void main(String[] args) {  
    System.out.println(DateUtil.getDateTimeStr(DateUtil.subDate(new Date(), 14)));  
//         JpegTool j = new JpegTool();  
//         try {  
//             j.SetScale(0.7);  
//             j.SetSmallHeight(100);  
//             j.doFinal("E:\\sunwave\\projects\\qchat2\\WebRoot\\ftpdownload\\189095654931396405620355.jpg"
//             ,"E:\\sunwave\\projects\\qchat2\\WebRoot\\ftpdownload\\suolvtujpeg\\189095654931396405620355.jpg");  
//         } catch (JpegToolException e) {  
//             e.printStackTrace();  
//         }  
     }  
}  


2,在action中调用类实现图片缩率的效果

public String batchDownFtpFiles_home(){

private Map infoMap=new HashMap();

infoMap = gpsPictureVideoService.findPictureByCon_home(model, 0, -1);

List<FFiles> pictureVideos = (List<FFiles>)infoMap.get(DATA_LIST);

for(FFiles picture:pictureVideos){
//原图片
String homeOrgPicPathName=realPath+"ftpdownload/"+ picture.getCurrentName();
File picFile = new File(homeOrgPicPathName);
//System.out.println("原图片是否存在:"+picFile.exists()+"原图片:"+homeOrgPicPathName);
//如果文件已经存在服务器目录下则不用下载
if(!picFile.exists()){
//System.out.println("--下载原图片-------");
downFtpToServer(realPath,picture.getStoragePath(),picture.getCurrentName());
}
//将原图片转换为缩略图
String sltPicPathName=sltPicPath+ picture.getCurrentName();//suolvtujpeg目录下的文件文件名
File sltpicFile = new File(sltPicPathName);
//System.out.println("缩率图片是否存在:"+sltpicFile.exists()+"缩略图片:"+sltPicPathName);
JpegTool j = new JpegTool();
if(!sltpicFile.exists()){
//System.out.println("--制作缩率图图片-------");
            try {
j.SetScale(0.5);
            j.SetSmallHeight(60);  
            j.doFinal(homeOrgPicPathName,sltPicPathName);  
} catch (JpegToolException e) {}  


}

}

return SUCCESS;

}


这篇关于制作缩率图 java压缩图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802991

相关文章

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException: org.junit.Test问题

《解决tomcat启动时报Junit相关错误java.lang.ClassNotFoundException:org.junit.Test问题》:本文主要介绍解决tomcat启动时报Junit相... 目录tomcat启动时报Junit相关错误Java.lang.ClassNotFoundException

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

JVM垃圾回收机制之GC解读

《JVM垃圾回收机制之GC解读》:本文主要介绍JVM垃圾回收机制之GC,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、死亡对象的判断算法1.1 引用计数算法1.2 可达性分析算法二、垃圾回收算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法2.4

springboot集成Lucene的详细指南

《springboot集成Lucene的详细指南》这篇文章主要为大家详细介绍了springboot集成Lucene的详细指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起... 目录添加依赖创建配置类创建实体类创建索引服务类创建搜索服务类创建控制器类使用示例以下是 Spring

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J

浅析如何使用xstream实现javaBean与xml互转

《浅析如何使用xstream实现javaBean与xml互转》XStream是一个用于将Java对象与XML之间进行转换的库,它非常简单易用,下面将详细介绍如何使用XStream实现JavaBean与... 目录1. 引入依赖2. 定义 JavaBean3. JavaBean 转 XML4. XML 转 J

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与