java对图片进行压缩
### Java 图片压缩技术详解及JSpsmart组件应用 #### 一、背景介绍 在Web开发过程中,图片作为重要的组成部分之一,在提升用户体验的同时也增加了页面加载时间。因此,对图片进行有效的压缩处理不仅可以减少服务器存储空间的需求,还能提高网页加载速度,从而优化用户体验。 #### 二、Java图片压缩原理与实现 ##### 1. 压缩原理概述 图片压缩通常分为无损压缩和有损压缩两种方式。 - **无损压缩**:压缩后的图片数据能够完全恢复到原始状态,适用于需要保持图片质量不变的场景。 - **有损压缩**:通过牺牲部分图片细节来换取更小的文件体积,适用于对图片质量要求不高或允许一定范围内质量损失的场景。 ##### 2. Java中图片压缩方法 Java提供了丰富的图像处理API,如`java.awt.Image`类和`javax.imageio.ImageIO`等,可以用来实现图片的压缩。 #### 三、JSpsmart组件简介 JSpsmart是一款用于处理文件上传的Java组件,它简化了文件上传过程中的许多复杂操作,并提供了丰富的配置选项。在这个示例中,我们使用JSpsmart来实现图片的上传和后续的压缩处理。 #### 四、基于JSpsmart的图片上传与压缩实现 根据提供的代码片段,我们可以看到一个典型的使用JSpsmart进行图片上传和压缩的例子。下面将详细解释各个步骤: ##### 1. 初始化SmartUpload对象 ```java SmartUpload mySmartUpload = new SmartUpload(); ``` 初始化SmartUpload对象,并设置文件大小的最大值为4MB。 ##### 2. 设置允许上传的文件类型 ```java mySmartUpload.setAllowedFilesList("jpg,gif"); ``` 仅允许上传`.jpg`和`.gif`格式的图片文件。 ##### 3. 执行文件上传 ```java mySmartUpload.upload(); ``` 执行文件上传操作,如果出现异常,则提示用户只能上传`.jpg`和`.gif`格式的文件。 ##### 4. 获取并处理上传的文件 ```java com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0); ``` 获取第一个上传的文件对象,并检查是否为空。 ##### 5. 文件保存路径设置 ```java String saveurl = request.getRealPath("/") + url; ``` 设置文件保存路径,其中`url`变量定义了相对路径。 ##### 6. 图片压缩处理 ```java java.io.File file = new java.io.File(saveurl); // 获取原图文件 String newurl = request.getRealPath("/") + url + filename + "_min." + ext; // 压缩后图片的保存路径 ``` 获取原图文件和压缩后图片的保存路径。 ```java Image src = javax.imageio.ImageIO.read(file); // 读取原图 ``` 使用`ImageIO`类读取图片。 ```java float tagsize = 200; // 目标宽度 int old_w = src.getWidth(null); // 原始宽度 int old_h = src.getHeight(null); // 原始高度 int tempsize; float tempdouble; if (old_w > old_h) { tempdouble = old_w / tagsize; } else { tempdouble = old_h / tagsize; } int new_w = Math.round(old_w / tempdouble); int new_h = Math.round(old_h / tempdouble); ``` 计算压缩后的宽度和高度,这里采用了按比例缩小的方式。 ```java BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB); tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); ``` 创建新的缓冲图像,并绘制压缩后的图像。 ```java FileOutputStream newimage = new FileOutputStream(newurl); JPEGCodec.writeJPEG(newimage, tag, 80); // 保存压缩后的图片 ``` 使用`JPEGCodec`类保存压缩后的图片。 #### 五、总结 通过以上步骤,我们实现了基于JSpsmart组件的图片上传和压缩处理功能。这种处理方式不仅简化了图片上传的过程,还能够在一定程度上保证图片质量的前提下减小文件体积,从而提升网站性能。对于实际项目来说,这种方法非常实用且高效。
下载解压后,将jar包复制到 \WEB-INF\lib 目录后重启服务器,jspsmart即可正常使用了
1、uploadimage.jsp
<%@ page contentType="text/html;charset=gb2312" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*,
java.sql.*,com.jspsmart.upload.*,java.util.*,cn.oof.database.*,cn.oof.house.*"%>
<%
SmartUpload mySmartUpload =new SmartUpload();
long file_size_max=4000000;
String fileName2="",ext="",testvar="";
String url="uploadfile/images/"; //应保证在根目录中有此目录的存在
//初始化
mySmartUpload.initialize(pageContext);
//只允许上载此类文件
try {
mySmartUpload.setAllowedFilesList("jpg,gif");
//上载文件
mySmartUpload.upload();
} catch (Exception e){
%>
<SCRIPT language=javascript>
alert("只允许上传.jpg和.gif类型图片文件");
window.location=''upfile.jsp'';
</script>
<%
}
try{
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
- 社会你伟哥2013-10-21还不错,压缩比例挺大的
- L_songzhinan2013-12-17虽然和自己要找的东西有点偏差 但是有些代码还是很值得借鉴的。
- 相守_sunset2013-07-20可以减少很多图片所占空间,还不错!
- licphenix2012-08-27可以减少很多图片所占空间
- chengqinqin2013-11-05可以减少很多图片所占空间
- 粉丝: 0
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助