`
阿杜杜不是阿木木
  • 浏览: 20267 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Java生成缩略图工具类

 
阅读更多

更新日期20150902

package com.jh.util;

import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * @desc生成图片缩略图
 **/
@SuppressWarnings("restriction")
public class ImageThumbnailUtil {
	public static void main(String[] args) {
		String filename = "src/love.jpg";
		String outFilename = "src/love_thumb.jpg";
		try {
			createThumbnail(filename, 390, 225, 100, outFilename);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void toThumbnail(String uploadPath,String fileName){
		String uploadThumbPath =uploadPath+"/thumb/";
		File file = new File(uploadThumbPath);
		if (!file.isFile()) {
			file.mkdirs();
		}
		System.out.println(uploadPath+fileName);
		System.out.println(uploadThumbPath+fileName);
		try {
			createThumbnail(uploadPath+"/"+fileName, 390, 225, 100, uploadThumbPath+fileName);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

private static void createThumbnail(String filename, int thumbWidth,int thumbHeight, int quality, String outFilename)
		throws InterruptedException,FileNotFoundException, IOException {

		// 加载图片文件
		Image image = Toolkit.getDefaultToolkit().getImage(filename);
		MediaTracker mediaTracker = new MediaTracker(new Container());
		mediaTracker.addImage(image, 0);
		// 强制加载图像
		mediaTracker.waitForID(0);
		// 测试图片是否加载成功:
		System.out.println(mediaTracker.isErrorAny());

		// 通过参数判断缩略图大小
		double thumbRatio = (double) thumbWidth / (double) thumbHeight;
		int imageWidth = image.getWidth(null);
		int imageHeight = image.getHeight(null);
		double imageRatio = (double) imageWidth / (double) imageHeight;
		// 缩小
		if (thumbRatio < imageRatio) {
			thumbHeight = (int) (thumbWidth / imageRatio);
		} else {// 放大
			thumbWidth = (int) (thumbHeight * imageRatio);
		}

		// 创建缩略图对象 并设置quality
		BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight,BufferedImage.TYPE_INT_RGB);

		Graphics2D graphics2D = thumbImage.createGraphics();

		graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);

		graphics2D.drawImage(image, 0, 0,thumbWidth, thumbHeight, null);
		// 输出缩略图
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFilename));
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);

		quality = Math.max(0, Math.min(quality, 100));
		param.setQuality((float) quality / 100.0f, false);
		encoder.setJPEGEncodeParam(param);
		encoder.encode(thumbImage);
		out.close();
	}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

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

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

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

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

    thumbnailator java用于图片压缩 生成缩略图 添加水印等

    thumbnailator(包括jar包跟api) java用于图片压缩 生成缩略图 添加水印等 这是我见过最好的压缩工具了 使用方法: Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat(...

    java缩略图

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

    thumbnailator-0.4.8.jar

    生成固定宽高缩略图,生成原始宽高缩略图,可设置生成缩略图的大小和质量,Thumbnails.of(path+"/"+name+".jpg").scale(1f) .outputQuality(0.25f) .outputFormat("jpg") .toFile&#40;path+"/thumbnail/"+name+"....

    基于SpringMVC的一个web框架

    Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...

    一个可以直接运行的基于SpringMVC的web框架1.1.12

    Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...

    可以直接运行的基于SpringMVC的web框架示例,也可以直接当公司框架

    Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...

    基于Spring MVC的web框架 1.1.11

    Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...

    从Java走向Java+EE+.rar

    6.3 实例——利用JSP制作图片缩略图 87 6.4 小结 90 第7章 JSTL——JSP标准标签库 91 7.1 JSTL基础 91 7.1.1 JSTL的核心标签库 92 7.1.2 JSTL中使用表达式语言 93 7.2 实例——利用JSTL标签生成数字序列...

    JAVA WEB典型模块与项目实战大全

    10.2 在线网上支付功能工具类  10.3 发出支付请求过程  10.4 接受支付返回过程  10.5 小结  第11章 javaweb邮件发送系统(jsp+servlet+javabean)  11.1 javaweb邮件发送系统原理  11.2 下载邮件相关jar...

    javapms门户网站源码

    添加或修改文章时,可设置文档所属栏目、标题、外部链接、副标题、标题颜色、短标题、自动Tag标签、摘要、来源、来源链接、作者、文档类型、文档属性、推荐、置顶、缩略图、文档内容、内容显示模板、发布时间等,...

    asp.net知识库

    常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...

    网管教程 从入门到精通软件篇.txt

    CLASS:Java类文件 CLP:Windows 剪贴板文件 CLL:Crick Software Clicker文件 CLS:Visual Basic类文件 CMD:Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件 CPI:Microsoft MS-DOS代码页...

    测试培训教材

    Using VAPI-XP test scripts, you can test COM/DCOM servers, SOAP-based Web services, Java APIs (such as Java classes and EJBs), and console applications. You can also use VAPI-XP to create a ...

Global site tag (gtag.js) - Google Analytics