制作缩率图 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

相关文章

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机