`
步青龙
  • 浏览: 298035 次
  • 性别: 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编程语言实现将图片及其对应的缩略图存储到数据库中的功能。这一技术在多种场景下都非常有用,比如在线商城...

    java缩略图jar包

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

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

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

    java利用ffmpeg获取视频缩略图

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

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

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

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

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

    java缩略图

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

    D7浏览图片缩略图源码

    这个标题“D7浏览图片缩略图源码”暗示我们讨论的是在Drupal 7环境中实现图片浏览功能,特别是涉及到缩略图展示以及点击缩略图后显示全尺寸图片的交互设计。下面我们将深入探讨这一主题,包括Drupal 7的基础知识、...

Global site tag (gtag.js) - Google Analytics