java实现自动生成缩略图片-mile米乐体育
本文实例为大家分享了java实现自动生成缩略图片的具体代码,供大家参考,具体内容如下
一、自动生成缩略图方法:
package writeimg; import java.awt.geom.affinetransform; import java.awt.image.affinetransformop; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import javax.imageio.imageio; public class jpegtool { private boolean isinitflag = false; // 对象是否己经初始化 private string pic_big_pathfilename = null; //定义源图片所在的带路径目录的文件名 private string pic_small_pathfilename = null; // 生成小图片的带存放路径目录的文件名 private int smallpicwidth = 0; //定义生成小图片的宽度和高度,给其一个就可以了 private int smallpicheight = 0; private int pic_big_width=0; private int pic_big_height=0; private double picscale = 0; //定义小图片的相比原图片的比例 /** * 构造函数 * @param 没有参数 */ public jpegtool(){ this.isinitflag = false; } /** * 私有函数,重置所有的参数 * @param 没有参数 * @return 没有返回参数 */ private void resetjpegtoolparams(){ this.picscale = 0; this.smallpicwidth = 0; this.smallpicheight = 0; this.isinitflag = false; } /** * @param scale 设置缩影图像相对于源图像的大小比例如 0.5 * @throws jpegtoolexception */ public void setscale(double scale) throws jpegtoolexception { if(scale<=0){ throw new jpegtoolexception(" 缩放比例不能为 0 和负数! "); } this.resetjpegtoolparams(); this.picscale = scale; this.isinitflag = true; } /** * @param smallpicwidth 设置缩影图像的宽度 * @throws jpegtoolexception */ public void setsmallwidth(int smallpicwidth) throws jpegtoolexception { if(smallpicwidth<=0) { throw new jpegtoolexception(" 缩影图片的宽度不能为 0 和负数! "); } this.resetjpegtoolparams(); this.smallpicwidth = smallpicwidth; this.isinitflag = true; } /** * @param smallpwww.cppcns.comicheight 设置缩影图像的高度 * @throws jpegtoolexception */ public void setsmallheight(int smallpicheight) throws jpegtoolexception { if(smallpicheight<=0) { throw new jpegtoolexception(" 缩影图片的高度不能为 0 和负数! "); } this.resetjpegtoolparams(); this.smallpicheight = smallpicheight; this.isinitflag = true; } /** *返回大图片路径 */ public string getpic_big_pathfilename() { return this.pic_big_pathfilename; } /** * 返回小图片路径 */ public string getpic_small_pathfilename() { return this.pic_small_pathfilename; } public int getsrcw() { return this.pic_big_width; } public int getsrch() { return this.pic_big_height; } /** * 生成源图像的缩影图像 * @param pic_big_pathfilename 源图像文件名,包含路径(如 windows 下 c:\\pic.jpg ; linux 下 /home/abner/pic/pic.jpg ) * @param pic_small_pathfilename 生成的缩影图像文件名,包含路径(如 windows 下 c:\\pic_small.jpg ; linux 下 /home/abner/pic/pic_small.jpg ) * @throws jpegtoolexception */ public void dofinal(string pic_big_pathfilename,string pic_small_pathfilename) throws jpegtoolexception { if(!this.isinitflag){ throw new jpegtoolexception(" 对象参数没有初始化! "); } if(pic_big_pathfilename==null || pic_small_pathfilename==null){ throw new jpegtoolexception(" 包含文件名的路径为空! "); } if((!pic_big_pathfilename.tolowercase().endswith("jpg")) && (!pic_big_pathfilename.tolowercase().endswith("jpeg"))){ throw new jpegtoolexception(" 只能处理 jpg/jpeg 文件! "); } if((!pic_small_pathfilename.tolowercase().endswith("jpg")) && !pic_small_pathfilename.tolowercase().endswith("jpeg")){ throw new jpegtoolexception(" 只能处理 jpg/jpeg 文件! "); } this.pic_big_pathfilename=pic_big_pathfilename; this.pic_small_pathfilename=pic_small_pathfilename; int smallw = 0; int smallh = 0; // 新建源图片和生成的小图片的文件对象 file fi = new file(pic_big_pathfilename); file fo = new file(pic_small_pathfilename); //生成图像变换对象 affinetransform transform = new affinetransform(); //通过缓冲读入源图片文件 bufferedimage bsrc = null; try { bsrc = imageio.read(fi); }catch (ioexception ex) { throw new jpegtoolexception(" 读取源图像文件出错! "); } this.pic_big_width= bsrc.getwidth();// 原图像的长度 this.pic_big_height = bsrc.getheight();// 原图像的宽度 double scale = (double)pic_big_width/pic_big_height;// 图像的长宽比例 if(this.smallpicwidth!=0) {// 根据设定的宽度求出长度 smallw = this.smallpicwidth;// 新生成的缩略图像的长度 smallh = (smallw*pic_big_height)/pic_big_width ;// 新生成的缩略图像的宽度 } else if(this.smallpicheight!=0) {// 根据设定的长度求出宽度 smallh = this.smallpicheight;// 新生成的缩略图像的长度 smallw = (smallh*pic_big_width)/pic_big_height;// 新生成的缩略图像的宽度 } else if(this.picscale!=0) {// 根据设置的缩小比例设置图像的长和宽 smallw = (int)((float)pic_big_width*this.picscale); smallh = (int)((float)pic_big_height*this.picscale); } else { throw new jpegtoolexception(" 对象参数初始化不正确! "); } double sx = (double)smallw/pic_big_width;//小/大图像的宽度比例 double sy = (double)smallh/pic_big_height;//小/大图像的高度比例 transform.settoscale(sx,sy);// 设置图像转换的比例 //生成图像转换操作对象 affinetransformop ato = new affinetransformop(transform,null); //生成缩小图像的缓冲对象 bufferedimage bsmall = new bufferedimage(smallw,smallh,bufferedimage.type_3byte_bgr); //生成小图像 ato.filter(bsrc,bsmall); //输出小图像 try{ imageio.write(bsmall, "jpeg", fo); } catch (ioexception ex1) { throw new jpegtoolexception(" 写入缩略图像文件出错! "); } } }
二、异常处理类:
package jpegtool; public class jpegtoolexception extends exception { private string errmsg = ""; public jpegtoolexception(string errmsg) { this.errmsg = errmsg; } public string getmsg(){ return "jpegtoolexception:" this.errmsg; } }
三、调用的例子:
package writeimg; public class t { public static void main(string[] args) { jpegtool j = new jpegtool(); try { j.setscale(0.7); j.setsmallheight(100); j.dofinal("d:\\305\\c\\javatest\\src\\11.jpg","d:\\305\\c\\javatest\\src\\22.jpg"); } catch (jpegtoolexception e) { // todo auto-generated catch block e.printstacktrace(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。