更新日期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上传图片,处理图片,word转pdf图片缩略图生成,替换所有图片的ip地址工具类
thumbnailator(包括jar包跟api) java用于图片压缩 生成缩略图 添加水印等 这是我见过最好的压缩工具了 使用方法: Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat(...
一个不错的工具类,上传的图片根据长宽的判断,按比例缩放生成另一张小图,可以减少浏览的浪费
生成固定宽高缩略图,生成原始宽高缩略图,可设置生成缩略图的大小和质量,Thumbnails.of(path+"/"+name+".jpg").scale(1f) .outputQuality(0.25f) .outputFormat("jpg") .toFile(path+"/thumbnail/"+name+"....
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
Excel工具类 Word工具类 Java NIO实现socket工具类 分布式session jdk升级到1.7 嵌入式redis服务(只支持linux) 1.0.13 修改默认的beanName生成策略,controller参数扩展 1.0.14 分布式session使用zookeeper 1.0.15 ...
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标签生成数字序列...
10.2 在线网上支付功能工具类 10.3 发出支付请求过程 10.4 接受支付返回过程 10.5 小结 第11章 javaweb邮件发送系统(jsp+servlet+javabean) 11.1 javaweb邮件发送系统原理 11.2 下载邮件相关jar...
添加或修改文章时,可设置文档所属栏目、标题、外部链接、副标题、标题颜色、短标题、自动Tag标签、摘要、来源、来源链接、作者、文档类型、文档属性、推荐、置顶、缩略图、文档内容、内容显示模板、发布时间等,...
常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...
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 ...