`
步青龙
  • 浏览: 298945 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

java实现缩略图,同等大小的图片占用1/7的磁盘空间。

    博客分类:
  • java
 
阅读更多

当缩略图的宽和高是原图的一半的时候,占用磁盘减少二十多倍,清晰度还算不错,代码:

 

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实现上传图片并生成缩略图的方法,包括获取文件路径、读取图像、创建缩略图及保存缩略图等步骤。通过这种方式,可以在不损失原图质量的前提下,有效地减少加载时间,提升用户体验。此外,本文还...

    java 缩略图实现

    在Java编程中,生成缩略图是一项常见的任务,特别是在处理图像处理、网页设计或移动应用开发等领域。这个主题涉及到如何利用Java的APIs来创建图片的缩小版本,以节省存储空间,提高页面加载速度,或者优化用户体验。...

    java上传图片,处理图片,word转pdf图片缩略图生成

    java上传图片,处理图片,word转pdf图片缩略图生成,替换所有图片的ip地址工具类

    Java实现图片等比例缩略图

    本篇文章将深入探讨如何使用Java实现图片的等比例缩略图,并提供相关代码示例。 首先,我们需要了解等比例缩略图的概念。等比例缩略图是指在保持原图宽高比的基础上,根据指定的最大尺寸进行缩小或放大。这样可以...

    java图片缩放 java缩略图 缩略图 java图片处理

    java图片缩放 java缩略图 缩略图 java图片处理

    java实现缩略图

    缩略图类(通用) 本java类能将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换。

    java生成缩略图

    根据提供的文件信息,我们可以总结出以下关于“Java生成缩略图”的相关知识点: ### Java生成缩略图基础知识 #### 缩略图的概念 缩略图是原始图像的一个较小版本,通常用于网页展示、图片预览等场景。通过生成缩略...

    JAVA获取视频缩略图

    首先,Java本身并不直接支持从视频文件中提取缩略图,但可以通过第三方库如JMF(Java Media Framework)或FFmpeg来实现。不过,JMF已经较为过时,目前更推荐使用FFmpeg库,它是一个强大的多媒体处理工具,提供了跨...

    动态缩略图实现方案

    动态缩略图是一种在网页或应用中常见的技术,它允许用户根据需要查看不同尺寸的图片,通常是缩小版的原图,以节省加载时间并优化用户体验。在Java中实现动态缩略图涉及到图像处理和流媒体技术。下面我们将深入探讨这...

    java生成缩略图类(已经封装好)

    java 生成缩略图类 源代码 (已经封装好)

    java实现将图片和缩略图存储到数据库中.pdf

    ### Java 实现将图片和缩略图存储到数据库中的详细解析 #### 一、知识点概述 本文档主要介绍如何使用Java编程语言实现将图片及其对应的缩略图存储到数据库中的功能。这一技术在多种场景下都非常有用,比如在线商城...

    fastdfs+nginx 分布式存储图片,支持动态缩略图

    本主题将详细介绍如何利用FastDFS和Nginx搭建一个分布式图片存储系统,并实现动态生成缩略图的功能。 首先,我们来看FastDFS。FastDFS设计的主要目标是为互联网应用提供高效的文件存储服务,它将文件存储与文件访问...

    java缩略图jar包

    在Java编程中,生成缩略图通常涉及到复杂的图像处理算法,包括图像重采样、比例调整、颜色空间转换等。thumbnailator库通过封装这些复杂操作,使得开发者只需要几行代码就能完成缩略图的创建。下面我们将深入探讨...

    java视频生成图片(缩略图)-实例-(指定时间)

    以上就是关于"Java视频生成图片(缩略图)-实例-(指定时间)"的主要知识点,涵盖了从选择合适的库到实现具体功能的各种技术细节。在实际项目中,根据需求和资源可用性,可以选择最适合的方案来实现。

    java利用ffmpeg获取视频缩略图

    5. **优化和扩展**:虽然这个项目提供了一个基本的实现,但实际应用中可能需要更复杂的逻辑,如动态设置时间点、提取多张缩略图、调整缩略图大小等。这些可以通过修改命令参数或增加额外的代码来实现。 这个项目...

    java生成图片缩略图和二进制文件的工具类

    将图片生成缩略图和转换为二进制的工具类,缩略图大小可调

    批量上传图片并生成缩略图java实现

    使用jspsmartupload实现图片的批量上传,并保存到服务器的指定路径,自动生成缩略图,与图片的路径相同。(需要导入jspsmartupload.jar,在工程下的WebContent\WEB-INF\lib中 )

    java缩略图

    一个不错的工具类,上传的图片根据长宽的判断,按比例缩放生成另一张小图,可以减少浏览的浪费

Global site tag (gtag.js) - Google Analytics