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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传