package com.util;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 压缩图片 创建图片缩略图
*
* @author slzs
*/
public class PicCompression {
/**
* 压缩图片方法
*
* @param oldFile 将要压缩的图片
* @param width 压缩宽
* @param height 压缩高
* @param quality 压缩清晰度 <b>建议为1.0</b>
* @param smallIcon 压缩图片后,添加的扩展名(在图片后缀名前添加)
* @param percentage 是否等比压缩 若true宽高比率将将自动调整
* @author slzs
* @return 如果处理正确返回压缩后的文件名 null则参数可能有误
*/
public static String doCompress(String oldFile, int width, int height, float quality, String smallIcon, boolean percentage) {
if (oldFile != null && width > 0 && height > 0) {
Image srcFile=null;
String newImage = null;
try {
File file = new File(oldFile);
// 文件不存在
if (!file.exists()) {
return null;
}
/*读取图片信息*/
srcFile = ImageIO.read(file);
int new_w = width;
int new_h = height;
if (percentage) {
// 为等比缩放计算输出的图片宽度及高度
double rate1 = ((double) srcFile.getWidth(null)) / (double) width + 0.1;
double rate2 = ((double) srcFile.getHeight(null)) / (double) height + 0.1;
double rate = rate1 > rate2 ? rate1 : rate2;
new_w = (int) (((double) srcFile.getWidth(null)) / rate);
new_h = (int) (((double) srcFile.getHeight(null)) / rate);
}
/* 宽高设定*/
BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(srcFile, 0, 0, new_w, new_h, null);
/*压缩后的文件名 */
String filePrex = oldFile.substring(0, oldFile.lastIndexOf('.'));
newImage = filePrex + smallIcon + oldFile.substring(filePrex.length());
/*压缩之后临时存放位置*/
FileOutputStream out = new FileOutputStream(newImage);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam jep = JPEGCodec.getDefaultJPEGEncodeParam(tag);
/* 压缩质量 */
jep.setQuality(quality, true);
encoder.encode(tag, jep);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
srcFile.flush();
}
return newImage;
} else {
return null;
}
}
//测试
public static void main(String str[]) {
System.out.println(PicCompression.doCompress("F:/big.jpg", 500, 500, 1, "_small", false));
System.out.print("ok...");
}
// 效果图也列出来比较
}
相关推荐
网上找的缩略图生成方法都不够清晰,于是决定自己研究和改进生成缩略图方法。此方法压缩后的图片小,清晰度高,压缩速度快。5000张图片大概抽根烟的功夫就压缩完了。高清的哦。各种参数都是可配的,方便移植到自己...
6. **Java bindings for FFmpeg:** 如果不希望通过命令行接口,还可以使用Java对FFmpeg的绑定库,如JAVE(Java Audio Video Encoder),它提供了一个友好的API来执行FFmpeg的任务,包括生成缩略图。 7. **处理步骤...
* 压缩图片方法 * * @param oldFile 将要压缩的图片 * @param width 压缩宽 * @param height 压缩高 * @param quality 压缩清晰度 建议为1.0 * @param smallIcon 压缩图片后,添加的扩展名(在图片后缀名前添加...
在IT行业中,生成缩略图和压缩图片是常见的图像处理任务,尤其在网站开发、社交媒体分享、移动应用以及存储和传输大量图像时显得尤为重要。本文将深入探讨如何生成缩略图以及有效地压缩图片,帮助您解决相关问题。 ...
thumbnailator(包括jar包跟api) java用于图片压缩 生成缩略图 添加水印等 这是我见过最好的压缩工具了 使用方法: Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat(...
在这个特定的场景中,"jSP上传图片生成缩略图"是一个常见的需求,尤其在网站开发中,如论坛、博客或电商网站等,用户可能需要上传图片,而为了提高页面加载速度和优化用户体验,通常会生成缩略图作为预览。...
在Java中生成缩略图是一项常见的任务,尤其是在开发Web应用或者需要处理用户上传图片的系统中。这个过程涉及对原始图像进行重新尺寸调整,以创建一个较小的版本,通常用于预览或节省存储空间。在提供的代码片段中,...
在IT行业中,图片生成缩略图是一个常见的任务,特别是在网页设计、内容管理和社交媒体等领域。缩略图的作用在于为用户提供快速预览,节省加载时间和网络资源。以下是对这一主题的详细阐述: 1. **什么是缩略图**:...
- **质量控制**:生成缩略图时,可以调整JPEG的压缩质量或PNG的压缩级别,以平衡图片质量与文件大小。 - **裁剪与填充**:如果需要特定尺寸的缩略图,可能需要裁剪多余部分或填充空白区域,保持原始画面的关键内容...
在Java中,压缩图片通常是为了减小文件大小,便于存储或传输,而同时尽可能保持图片质量。上述代码提供了一个名为`CompressPicTools`的类,专门用于压缩图片,保持图片原有的宽高比,同时控制压缩后的失真程度。下面...
在本文中,我们将深入探讨如何使用JSP和jspsmart组件来实现图片上传及生成缩略图的功能。jspsmart组件是一个强大的文件上传工具,它提供了便捷的API用于处理文件上传,包括验证文件类型和大小,以及错误处理。 首先...
可以控制宽高大小的缩略图生成函数
在这个案例中,Activex控件被用来处理图片生成缩略图的逻辑。 缩略图的生成通常涉及到以下步骤: 1. 图片读取:首先,需要读取用户上传的原始图片文件。这通常通过文件流或内存缓冲区来实现,以确保高效的数据处理...
然而,需要注意的是,在实际部署中,应考虑资源消耗和性能优化,例如使用缓存机制避免重复生成缩略图,以及优化图像压缩参数以达到更好的视觉效果和加载速度。此外,对于动态生成的缩略图,还应确保处理过程中的异常...
2. Java实现批量压缩图片裁剪压缩多种尺寸缩略图一键批量上传图片的实现思路:先把本地磁盘目录中的所有图片资源通过IO流读出来,读到内存中,然后对图片的名称根据定义好的业务规则解析,生成不同的图片名,然后对...
4. **质量控制**:在生成缩略图时,为了减小文件大小,可以调整JPEG的质量因子或选择不同的压缩算法,平衡图像质量和文件大小。 5. **保存和展示**:将生成的缩略图保存到服务器,然后在JSP页面上显示。可以提供预览...
在Java编程环境中,图片压缩和生成缩略图是常见的任务,尤其在处理大量图像数据或者优化网站性能时显得尤为重要。本文将深入探讨如何利用Java进行图片处理,包括压缩和生成缩略图的关键技术。 首先,Java提供了丰富...
网上找的缩略图生成方法都不够清晰,于是决定自己研究和改进生成缩略图方法。此方法压缩后的图片小,清晰度高,压缩速度快。5000张图片大概抽根烟的功夫就压缩完了。高清的哦。各种参数都是可配的,方便移植到自己...
在IT行业中,生成缩略图和添加水印是常见的图像处理任务,特别是在网站开发、社交媒体分享、图片库管理和数字营销中。本压缩包文件“生成缩略图并加水印文字源码.zip”提供了一套源代码,用于帮助开发者实现这两个...
在IT领域,生成缩略图是一项常见的任务,特别是在网站开发、图像处理软件和多媒体应用中。缩略图是原图像的缩小版本,用于快速预览或节省存储空间。本篇文章将详细探讨两种主要的生成缩略图的方法:等比缩放和固定...