好记性不如烂笔头3-JAVA生成缩略图
2015-01-28 17:13
447 查看
电子商务网站等系统,有大量的图片;从加载速度和流量等角度出发,会使用比较多的缩略图。
1、创建图片的缩略图源代码
package com.daily;
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.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;
/**
* 生成缩略图
* @author 范芳铭
*/
public class EasyThumbnail {
private voidcreateThumbnail(String filename, int thumbWidth,
intthumbHeight, int quality, String outFilename)
throwsInterruptedException, FileNotFoundException, IOException {
// loadimage from filename
Image image= Toolkit.getDefaultToolkit().getImage(filename);
MediaTrackermediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image,0);
mediaTracker.waitForID(0);
// determinethumbnail size from WIDTH and HEIGHT
doublethumbRatio = (double) thumbWidth / (double) thumbHeight;
intimageWidth = image.getWidth(null);
intimageHeight = image.getHeight(null);
doubleimageRatio = (double) imageWidth / (double) imageHeight;
if(thumbRatio < imageRatio) {
thumbHeight= (int) (thumbWidth / imageRatio);
} else {
thumbWidth= (int) (thumbHeight * imageRatio);
}
// draworiginal image to thumbnail image object and
// scale itto the new size on-the-fly
BufferedImagethumbImage = new BufferedImage(thumbWidth, thumbHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2Dgraphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image,0, 0, thumbWidth, thumbHeight, null);
// savethumbnail image to outFilename
BufferedOutputStreamout = new BufferedOutputStream(
newFileOutputStream(outFilename));
JPEGImageEncoderencoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParamparam = 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();
}
public staticvoid main(String[] args) throws Exception{
long start =System.currentTimeMillis();
EasyThumbnailthumbnail = new EasyThumbnail();
thumbnail.createThumbnail("d:/ffm83/fx.jpg",108, 100, 100, "d:/ffm83/fx_thunmbnail.jpg");
long end =System.currentTimeMillis();
System.out.println("生成缩略图耗时:" + (end - start) + "(毫秒)");
}
}
2、运行结果
生成缩略图耗时:107(毫秒)
1、创建图片的缩略图源代码
package com.daily;
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.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;
/**
* 生成缩略图
* @author 范芳铭
*/
public class EasyThumbnail {
private voidcreateThumbnail(String filename, int thumbWidth,
intthumbHeight, int quality, String outFilename)
throwsInterruptedException, FileNotFoundException, IOException {
// loadimage from filename
Image image= Toolkit.getDefaultToolkit().getImage(filename);
MediaTrackermediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image,0);
mediaTracker.waitForID(0);
// determinethumbnail size from WIDTH and HEIGHT
doublethumbRatio = (double) thumbWidth / (double) thumbHeight;
intimageWidth = image.getWidth(null);
intimageHeight = image.getHeight(null);
doubleimageRatio = (double) imageWidth / (double) imageHeight;
if(thumbRatio < imageRatio) {
thumbHeight= (int) (thumbWidth / imageRatio);
} else {
thumbWidth= (int) (thumbHeight * imageRatio);
}
// draworiginal image to thumbnail image object and
// scale itto the new size on-the-fly
BufferedImagethumbImage = new BufferedImage(thumbWidth, thumbHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2Dgraphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image,0, 0, thumbWidth, thumbHeight, null);
// savethumbnail image to outFilename
BufferedOutputStreamout = new BufferedOutputStream(
newFileOutputStream(outFilename));
JPEGImageEncoderencoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParamparam = 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();
}
public staticvoid main(String[] args) throws Exception{
long start =System.currentTimeMillis();
EasyThumbnailthumbnail = new EasyThumbnail();
thumbnail.createThumbnail("d:/ffm83/fx.jpg",108, 100, 100, "d:/ffm83/fx_thunmbnail.jpg");
long end =System.currentTimeMillis();
System.out.println("生成缩略图耗时:" + (end - start) + "(毫秒)");
}
}
2、运行结果
生成缩略图耗时:107(毫秒)
相关文章推荐
- 好记性不如烂笔头7-JAVA生成EXCEL文件
- 好记性不如烂笔头4-JAVA生成PDF文件
- 好记性不如烂笔头17-java中的javaBean
- 好记性不如烂笔头20-java对oracle的clob和blob字段的总结
- 好记性不如烂笔头42-javaWeb监听对象域属性变化(6)
- 好记性不如烂笔头49-javaWeb框架struts2中的拦截器(4)
- 好记性不如烂笔头5-JAVA快速文件拷贝
- 好记性不如烂笔头31-java应用中的敏感词过滤实现(3)
- 好记性不如烂笔头47-java拦截器-用CGLib实现动态代理(2)
- 好记性不如烂笔头38-java监听windows窗口事件Listener(2)
- eclipse 生成 javadoc 过滤某些指定的方法 (好记性不如烂笔头)
- 好记性不如烂笔头8-JAVA读取EXCEL文件
- 好记性不如烂笔头30-java应用中的过滤器Filter(2)
- 记性不如烂笔头29-java应用中的过滤器Filter(1)
- 好记性不如烂笔头43-javaWeb中Session相关事件监听器(7)
- 好记性不如烂笔头1-JAVA基础数据类型和转换
- 好记性不如烂笔头12-使用HttpServletResponse生成验证码
- 好记性不如烂笔头26-JAVA处理文件事务(4)
- 好记性不如烂笔头50-javaWeb框架struts2中的方法拦截器(5)
- 好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)