制作缩率图 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 Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn