制作缩率图 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整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件