Java實(shí)現(xiàn)自動(dòng)生成縮略圖片
本文實(shí)例為大家分享了Java實(shí)現(xiàn)自動(dòng)生成縮略圖片的具體代碼,供大家參考,具體內(nèi)容如下
一、自動(dòng)生成縮略圖方法:
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; // ? ? ? ? 對象是否己經(jīng)初始化? ? ? ? ? private String pic_big_pathfilename = null; //定義源圖片所在的帶路徑目錄的文件名 ? ? ? ? private String pic_small_pathfilename = null; // 生成小圖片的帶存放路徑目錄的文件名? ? ? ? ? private int smallpicwidth = 0; //定義生成小圖片的寬度和高度,給其一個(gè)就可以了? ? ? ? ? private int smallpicheight = 0;? ? ? ? ? private int pic_big_width=0; ? ? ? ? private int pic_big_height=0; ? ? ? ? private double picscale = 0; //定義小圖片的相比原圖片的比例? ? ? ? ? /**? ? ? ? ? * 構(gòu)造函數(shù)? ? ? ? ? * @param 沒有參數(shù)? ? ? ? ? */? ? ? ? ? public JpegTool(){ ? ? ? ? ? ? ? ? this.isInitFlag = false;? ? ? ? ? }? ? ? ? ? /**? ? ? ? ? * 私有函數(shù),重置所有的參數(shù)? ? ? ? ? * @param 沒有參數(shù)? ? ? ? ? * @return 沒有返回參數(shù)? ? ? ? ? */? ? ? ? ? private void resetJpegToolParams(){? ? ? ? ? ? ? ? ? this.picscale = 0;? ? ? ? ? ? ? ? ? this.smallpicwidth = 0;? ? ? ? ? ? ? ? ? this.smallpicheight = 0;? ? ? ? ? ? ? ? ? this.isInitFlag = false;? ? ? ? ? }? ? ? ? ? /**? ? ? ? ? * @param scale 設(shè)置縮影圖像相對于源圖像的大小比例如 0.5? ? ? ? ? * @throws JpegToolException? ? ? ? ? */? ? ? ? ? public void SetScale(double scale) throws JpegToolException ? ? ? ? {? ? ? ? ? ? ? ? ? if(scale<=0){? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? throw new JpegToolException(" 縮放比例不能為 0 和負(fù)數(shù)! ");? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? this.resetJpegToolParams();? ? ? ? ? ? ? ? ? this.picscale = scale;? ? ? ? ? ? ? ? ? this.isInitFlag = true;? ? ? ? ? }? ? ? ? ? /**? ? ? ? ? * @param smallpicwidth 設(shè)置縮影圖像的寬度? ? ? ? ? * @throws JpegToolException? ? ? ? ? */? ? ? ? ? public void SetSmallWidth(int smallpicwidth) throws JpegToolException? ? ? ? ? {? ? ? ? ? ? ? ? ? if(smallpicwidth<=0) ? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ? ? ? throw new JpegToolException(" 縮影圖片的寬度不能為 0 和負(fù)數(shù)! ");? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? this.resetJpegToolParams();? ? ? ? ? ? ? ? ? this.smallpicwidth = smallpicwidth;? ? ? ? ? ? ? ? ? this.isInitFlag = true;? ? ? ? ? }? ? ? ? ? ? /**? ? ? ? ? * @param smallpicheight 設(shè)置縮影圖像的高度? ? ? ? ? * @throws JpegToolException? ? ? ? ? */? ? ? ? ? ? public void SetSmallHeight(int smallpicheight) throws JpegToolException {? ? ? ? ? ? ? ? ? if(smallpicheight<=0) ? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ?throw new JpegToolException(" 縮影圖片的高度不能為 0 和負(fù)數(shù)! ");? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? 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(" 對象參數(shù)沒有初始化! ");? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? 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(" 讀取源圖像文件出錯(cuò)! ");? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? ? 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) ? ? ? ? ? ? ? ? {// 根據(jù)設(shè)定的寬度求出長度? ? ? ? ? ? ? ? ? ? ? ? ? smallw = this.smallpicwidth;// 新生成的縮略圖像的長度? ? ? ? ? ? ? ? ? ? ? ? ? smallh = (smallw*pic_big_height)/pic_big_width ;// 新生成的縮略圖像的寬度? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else if(this.smallpicheight!=0) ? ? ? ? ? ? ? ? {// 根據(jù)設(shè)定的長度求出寬度? ? ? ? ? ? ? ? ? ? ? ? ? smallh = this.smallpicheight;// 新生成的縮略圖像的長度? ? ? ? ? ? ? ? ? ? ? ? ? smallw = (smallh*pic_big_width)/pic_big_height;// 新生成的縮略圖像的寬度? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else if(this.picscale!=0) ? ? ? ? ? ? ? ? {// 根據(jù)設(shè)置的縮小比例設(shè)置圖像的長和寬? ? ? ? ? ? ? ? ? ? ? ? ? smallw = (int)((float)pic_big_width*this.picscale);? ? ? ? ? ? ? ? ? ? ? ? ? smallh = (int)((float)pic_big_height*this.picscale);? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? else ? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ? throw new JpegToolException(" 對象參數(shù)初始化不正確! ");? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? double sx = (double)smallw/pic_big_width;//小/大圖像的寬度比例? ? ? ? ? ? ? ? ? double sy = (double)smallh/pic_big_height;//小/大圖像的高度比例? ? ? ? ? ? ? ? ? transform.setToScale(sx,sy);// 設(shè)置圖像轉(zhuǎn)換的比例? ? ? ? ? ? ? ? ? //生成圖像轉(zhuǎn)換操作對象? ? ? ? ? ? ? ? ? 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(" 寫入縮略圖像文件出錯(cuò)! ");? ? ? ? ? ? ? ? ? }? ? ? ? ? } }
二、異常處理類:
package jpegtool; ? ? ? public class JpegToolException extends Exception { ? ? ? ? ? ? private String errMsg = "";? ? ? ? ? ? ? public JpegToolException(String errMsg)? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ? this.errMsg = errMsg;? ? ? ? ? ? ? }? ? ? ? ? ? ? ? public String getMsg(){? ? ? ? ? ? ? ? ? return "JpegToolException:"+this.errMsg;? ? ? ? ? ? ? }? ? ? }
三、調(diào)用的例子:
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(); ?? ??? ?} ?? ?} ? }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java 截取視頻資料中的某一幀作為縮略圖
- Java 讀取網(wǎng)絡(luò)圖片存儲(chǔ)到本地并生成縮略圖
- 詳解Java實(shí)現(xiàn)批量壓縮圖片裁剪壓縮多種尺寸縮略圖一鍵批量上傳圖片
- Java實(shí)現(xiàn)的不同圖片居中剪裁生成同一尺寸縮略圖功能示例
- java生成縮略圖的方法示例
- Java圖片裁剪和生成縮略圖的實(shí)例方法
- java實(shí)現(xiàn)創(chuàng)建縮略圖、伸縮圖片比例生成的方法
- java根據(jù)url抓取并生成縮略圖的示例
- 用java實(shí)現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實(shí)現(xiàn)代碼
- Java縮略圖生成庫之Thumbnailator應(yīng)用說明
相關(guān)文章
Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler)
這篇文章主要介紹了Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01SpringBoot整合Spring Security構(gòu)建安全的Web應(yīng)用
pring Security是一個(gè)強(qiáng)大的身份驗(yàn)證和訪問控制框架,本文主要介紹了SpringBoot整合Spring Security構(gòu)建安全的Web應(yīng)用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01Java使用easypoi快速導(dǎo)入導(dǎo)出的實(shí)現(xiàn)
這篇文章主要介紹了實(shí)現(xiàn)Java使用easypoi快速導(dǎo)入導(dǎo)出的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03SpringCloud Gateway自定義filter獲取body中的數(shù)據(jù)為空的問題
這篇文章主要介紹了SpringCloud Gateway自定義filter獲取body中的數(shù)據(jù)為空,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10Java中Quartz高可用定時(shí)任務(wù)快速入門
如果你想做定時(shí)任務(wù),有高可用方面的需求,或者僅僅想入門快,上手簡單,那么選用它準(zhǔn)沒錯(cuò),感興趣的小伙伴們可以參考一下2022-04-04對arraylist中元素進(jìn)行排序?qū)嵗a
這篇文章主要介紹了對arraylist中元素進(jìn)行排序?qū)嵗a,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。2017-11-11Mybatis有查詢結(jié)果但存不進(jìn)實(shí)體類的解決方案
這篇文章主要介紹了Mybatis有查詢結(jié)果但存不進(jìn)實(shí)體類的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Mybatis中Collection集合標(biāo)簽的使用詳解
這篇文章主要介紹了Mybatis中Collection集合標(biāo)簽的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06