当缩略图的宽和高是原图的一半的时候,占用磁盘减少二十多倍,清晰度还算不错,代码:
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* 缩略图
* @author Administrator
*
*/
public class ReduceImageUtil {
public byte[] imageChangeSize(byte[] data,int height,int maxWidth) throws IOException {
float rate = 1;
int new_wi = 0;
int new_he = 0;
int wi = maxWidth;
int he = height;
InputStream is = new ByteArrayInputStream(data);
BufferedImage bufImg = ImageIO.read(is);
wi = bufImg.getWidth();
he = bufImg.getHeight();
rate = (float) wi / (float) he;
if (wi > maxWidth && he <= height) {
new_wi = maxWidth;
new_he = new Float((float) new_wi / rate).intValue();
} else if ((he > height && wi <= maxWidth)
|| (he > height && wi > maxWidth)) {
new_he = height;
new_wi = new Float(new_he * rate).intValue();
} else if (he <= height && wi <= maxWidth) {
new_wi = wi;
new_he = he;
}
BufferedImage bf = new BufferedImage(new_wi, new_he,
BufferedImage.TYPE_INT_RGB);
// bf.getGraphics().drawImage(bufImg,0,0,new_wi,new_he,null);
bf.getGraphics().drawImage(
bufImg.getScaledInstance(new_wi, new_he, Image.SCALE_SMOOTH),
0, 0, new_wi, new_he, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(bf); // 近JPEG编码
byte[] re = out.toByteArray();
return re;
}
/**
* 生成缩略图
* @param imagePath 原图片路径
* @param smallImagePath 缩略图路径
* @param height 缩略图高度
* @param maxWidth 缩略图最大宽度
*/
public void createReduceImage(String imagePath,String smallImagePath,int height,int maxWidth) {
ImageIO io = null;
try {
FileInputStream fis = new FileInputStream(imagePath);
byte[] buf = new byte[102400];
int re = 0;
byte[] dd = new byte[0];
while ((re = fis.read(buf)) > 0) {
byte[] d = new byte[dd.length + re];
System.arraycopy(dd, 0, d, 0, dd.length);
System.arraycopy(buf, 0, d, dd.length, re);
dd = d;
}
FileOutputStream fos = new FileOutputStream(smallImagePath);
fos.write(imageChangeSize(dd,height,maxWidth));
fos.flush();
fos.close();
BufferedImage bf2 = io.read(new File(smallImagePath));
} catch (Exception e) {
e.printStackTrace();
}
}
}
调用:
String imagePath = "D:\\aa.jpg";
// 缩略图路径
String smallImagePath = "D:\\aasmall.jpg";
ReduceImageUtil testimage = new ReduceImageUtil();
// 生成缩略图
testimage.createReduceImage(imagePath,smallImagePath,768,1024);
分享到:
相关推荐
"java 图片生成缩略图" Java 图片生成缩略图是Java程序开发中一个常见的需求,通过将图片以缩略图形式展示,可以提高用户体验和网站性能。在本文中,我们将介绍使用Java生成缩略图的方法。 缩略图生成方法 在 ...
本文介绍了使用Java实现上传图片并生成缩略图的方法,包括获取文件路径、读取图像、创建缩略图及保存缩略图等步骤。通过这种方式,可以在不损失原图质量的前提下,有效地减少加载时间,提升用户体验。此外,本文还...
在Java编程中,生成缩略图是一项常见的任务,特别是在处理图像处理、网页设计或移动应用开发等领域。这个主题涉及到如何利用Java的APIs来创建图片的缩小版本,以节省存储空间,提高页面加载速度,或者优化用户体验。...
java上传图片,处理图片,word转pdf图片缩略图生成,替换所有图片的ip地址工具类
本篇文章将深入探讨如何使用Java实现图片的等比例缩略图,并提供相关代码示例。 首先,我们需要了解等比例缩略图的概念。等比例缩略图是指在保持原图宽高比的基础上,根据指定的最大尺寸进行缩小或放大。这样可以...
java图片缩放 java缩略图 缩略图 java图片处理
缩略图类(通用) 本java类能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换。
根据提供的文件信息,我们可以总结出以下关于“Java生成缩略图”的相关知识点: ### Java生成缩略图基础知识 #### 缩略图的概念 缩略图是原始图像的一个较小版本,通常用于网页展示、图片预览等场景。通过生成缩略...
首先,Java本身并不直接支持从视频文件中提取缩略图,但可以通过第三方库如JMF(Java Media Framework)或FFmpeg来实现。不过,JMF已经较为过时,目前更推荐使用FFmpeg库,它是一个强大的多媒体处理工具,提供了跨...
动态缩略图是一种在网页或应用中常见的技术,它允许用户根据需要查看不同尺寸的图片,通常是缩小版的原图,以节省加载时间并优化用户体验。在Java中实现动态缩略图涉及到图像处理和流媒体技术。下面我们将深入探讨这...
java 生成缩略图类 源代码 (已经封装好)
### Java 实现将图片和缩略图存储到数据库中的详细解析 #### 一、知识点概述 本文档主要介绍如何使用Java编程语言实现将图片及其对应的缩略图存储到数据库中的功能。这一技术在多种场景下都非常有用,比如在线商城...
本主题将详细介绍如何利用FastDFS和Nginx搭建一个分布式图片存储系统,并实现动态生成缩略图的功能。 首先,我们来看FastDFS。FastDFS设计的主要目标是为互联网应用提供高效的文件存储服务,它将文件存储与文件访问...
在Java编程中,生成缩略图通常涉及到复杂的图像处理算法,包括图像重采样、比例调整、颜色空间转换等。thumbnailator库通过封装这些复杂操作,使得开发者只需要几行代码就能完成缩略图的创建。下面我们将深入探讨...
以上就是关于"Java视频生成图片(缩略图)-实例-(指定时间)"的主要知识点,涵盖了从选择合适的库到实现具体功能的各种技术细节。在实际项目中,根据需求和资源可用性,可以选择最适合的方案来实现。
5. **优化和扩展**:虽然这个项目提供了一个基本的实现,但实际应用中可能需要更复杂的逻辑,如动态设置时间点、提取多张缩略图、调整缩略图大小等。这些可以通过修改命令参数或增加额外的代码来实现。 这个项目...
将图片生成缩略图和转换为二进制的工具类,缩略图大小可调
使用jspsmartupload实现图片的批量上传,并保存到服务器的指定路径,自动生成缩略图,与图片的路径相同。(需要导入jspsmartupload.jar,在工程下的WebContent\WEB-INF\lib中 )
一个不错的工具类,上传的图片根据长宽的判断,按比例缩放生成另一张小图,可以减少浏览的浪费