亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JMagick實現基本圖像處理的類實例

2019-11-26 15:07:47
字體:
來源:轉載
供稿:網友

本文實例講述了JMagick實現基本圖像處理的類。分享給大家供大家參考。具體分析如下:

JMagick是一個開源API,利用JNI(Java Native Interface)技術實現了對 ImageMagick API的Java訪問接口,因此也將比純Java實現的圖片操作函數在速度上要快。

/** * JMagickHandler.java *  * Author: Winter Lau * 2007-7-11 */package com.eportal.img;import java.awt.Dimension;import java.io.File;import org.apache.commons.io.FileUtils;import com.gif4j.GifDecoder;import com.gif4j.GifEncoder;import com.gif4j.GifImage;import com.gif4j.GifTransformer;import dlog.common.util.StringUtils;import magick.ImageInfo;import magick.MagickException;import magick.MagickImage;/** * 使用JMagick進行圖像處理 */class JMagickHandler {  private final static int DEFAULT_QUALITY = 90;  protected JMagickHandler(){}  private final static ThreadLocal<MyMagickImage> tLocal = new ThreadLocal<MyMagickImage>();  private String lastSrc = null;  /**   * 清除線程本地存儲信息   */  private synchronized MyMagickImage getMagickImage(String src) throws Exception {    MyMagickImage mi = tLocal.get();    if(mi != null && StringUtils.equals(src, lastSrc))      return mi;    else if(mi != null)      tLocal.remove();    this.lastSrc = src;    ImageInfo info = new ImageInfo(src);    mi = new MyMagickImage(info);    tLocal.set(mi);    return mi;  }  @Override  public void cleanup() {    MyMagickImage mi = tLocal.get();    if(mi != null)      mi.destroyImages();    tLocal.remove();  }  @Override  public ImageExtInfo getImageInfo(String src) throws Exception {    try{      MagickImage image = this.getMagickImage(src);      ImageExtInfo ext = new ImageExtInfo();      Dimension dim = image.getDimension();      ext.setWidth((int)dim.getWidth());      ext.setHeight((int)dim.getHeight());      ext.setSize(image.sizeBlob());      ext.setAnimated(image.isAnimatedImage());      return ext;    }catch(MagickException e){      return new PureJavaHandler().getImageInfo(src);    }  }  private final static boolean hasUnicode(String str){    return str.getBytes().length != str.length();  }  @Override  public void resize(String src, String dest, int width, int height, int quality) throws Exception {    boolean u_src = hasUnicode(src);    MyMagickImage image;    File srctmp = null;    if(u_src){      srctmp = File.createTempFile("jmagick_s_" + src.hashCode(), null);      FileUtils.copyFile(new File(src), srctmp);      image = this.getMagickImage(srctmp.getAbsolutePath());    }    else      image = this.getMagickImage(src);    image.getImageInfo().setQuality((quality>0)?quality:DEFAULT_QUALITY);    MagickImage scaledimage = null;    try{      if(image.isAnimatedImage()){        GifImage gifImage = GifDecoder.decode(new File(src));        GifImage newGif = GifTransformer.resize(gifImage, width, height, false);                GifEncoder.encode(newGif, new File(dest));      }      else{//others        scaledimage = image.scaleImage(width, height);        scaledimage.setImageFormat("JPEG");        scaledimage.profileImage("*", null);        boolean u_dest = hasUnicode(dest);        if(u_dest){          File tmp = File.createTempFile("jmagick_d_" + dest.hashCode(), null);          scaledimage.setFileName(tmp.getAbsolutePath());           scaledimage.writeImage(image.getImageInfo());          FileUtils.copyFile(tmp, new File(dest));          FileUtils.forceDelete(tmp);        }        else{          scaledimage.setFileName(dest);           scaledimage.writeImage(image.getImageInfo());        }      }          }finally{      if(srctmp != null) FileUtils.forceDelete(srctmp);      if(scaledimage != null)        scaledimage.destroyImages();          }  }  @Override  public void rotate(String src, String dest, double degrees) throws Exception {    boolean u_src = hasUnicode(src);    MyMagickImage image;    File srctmp = null;    if(u_src){      srctmp = File.createTempFile("jmagick_s_" + src.hashCode(), null);      FileUtils.copyFile(new File(src), srctmp);      image = this.getMagickImage(srctmp.getAbsolutePath());    }    else      image = this.getMagickImage(src);    try{      MagickImage rotateImg = image.rotateImage(degrees);      rotateImg.profileImage("*", null);       boolean u_dest = hasUnicode(dest);      if(u_dest){        File tmp = File.createTempFile("jmagick_d_" + dest.hashCode(), null);        rotateImg.setFileName(tmp.getAbsolutePath()); // convert to png        rotateImg.writeImage(image.getImageInfo());        rotateImg.destroyImages();        FileUtils.copyFile(tmp, new File(dest));        FileUtils.forceDelete(tmp);      }      else{        rotateImg.setFileName(dest); // convert to png        rotateImg.writeImage(image.getImageInfo());        rotateImg.destroyImages();             }    }finally{      if(srctmp != null)        FileUtils.forceDelete(srctmp);    }  }  private static class MyMagickImage extends MagickImage {    private ImageInfo imageInfo;    public ImageInfo getImageInfo() {      return imageInfo;    }    public MyMagickImage(ImageInfo info) throws MagickException{      super(info);      this.imageInfo = info;    }  }  @Override  public void cropImage(String src, int width, int height, int point,      int point2, String dst) throws Exception {    // TODO Auto-generated method stub  }}

希望本文所述對大家的java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
懂色av影视一区二区三区| 爽爽爽爽爽爽爽成人免费观看| 中文字幕精品一区久久久久| 亚洲精品丝袜日韩| 在线观看免费高清视频97| 亚洲综合成人婷婷小说| 日韩精品亚洲元码| 亚洲人成伊人成综合网久久久| 日本久久久久亚洲中字幕| 亚洲片av在线| 青草青草久热精品视频在线网站| 91精品中国老女人| 久久不射电影网| 国产日韩av高清| 亚洲成人av片| 国产成人黄色av| 美日韩精品免费观看视频| 久久免费国产精品1| 国产在线拍揄自揄视频不卡99| 国产91精品最新在线播放| 欧美极品在线视频| 国产综合福利在线| 91av视频在线| 九九热视频这里只有精品| 人九九综合九九宗合| 久久精品视频中文字幕| 日韩精品高清视频| 欧美老女人性生活| 国产成人亚洲综合| 亚洲成人网久久久| 91久久精品国产91久久性色| 成人444kkkk在线观看| 久久成人精品一区二区三区| 色噜噜狠狠色综合网图区| 91在线网站视频| 欧美日韩国产123| 日韩欧美一区二区三区| 精品视频在线播放色网色视频| 97在线视频精品| 日韩成人小视频| 中文字幕国产亚洲2019| 2020欧美日韩在线视频| 日韩欧美国产免费播放| 久久中文字幕国产| 亚洲性视频网站| 国产成人精品久久二区二区91| 国产精品老牛影院在线观看| 欧美激情亚洲综合一区| 精品久久久久久久久久久久| 2025国产精品视频| 久久精品中文字幕一区| 亚洲社区在线观看| 韩国欧美亚洲国产| 日韩精品一二三四区| 国产美女91呻吟求| 国产一区二区三区高清在线观看| 伊人一区二区三区久久精品| 亚洲精品视频久久| 91免费视频网站| 亚洲精品电影在线观看| 91精品久久久久久久久久久久久| 国产精品成人av在线| 日韩精品免费在线视频观看| 成人黄色片网站| 性色av一区二区咪爱| 久久亚洲精品毛片| 亚洲国产成人91精品| 91精品国产精品| 国产精品成人免费电影| 日韩在线中文视频| 欧美精品久久一区二区| 国产精品第七十二页| 亚洲天堂一区二区三区| 日本精品性网站在线观看| 亚洲激情电影中文字幕| 久久久国产在线视频| 久久久久久久久国产精品| 久久中文字幕在线视频| 伦伦影院午夜日韩欧美限制| 亚洲欧美日韩爽爽影院| 国产精品444| 国产午夜精品久久久| 亚洲福利视频在线| 精品欧美aⅴ在线网站| 亚洲激情 国产| 欧美激情一区二区久久久| 国产综合在线观看视频| 久久99国产精品自在自在app| 2025国产精品视频| 久久精品国产91精品亚洲| 国产va免费精品高清在线观看| 久久久久久久久久久免费| 欧美成人四级hd版| 日韩精品中文字幕视频在线| 久久亚洲一区二区三区四区五区高| 91视频-88av| 色综合久久悠悠| 国产精品日日摸夜夜添夜夜av| 久久精品国产99国产精品澳门| 日韩在线观看免费全集电视剧网站| 国产伊人精品在线| 91大神福利视频在线| 91精品国产乱码久久久久久久久| 亚洲色图欧美制服丝袜另类第一页| 亚洲精品成人久久电影| 亚洲欧洲在线视频| 亚洲欧洲在线免费| 日韩乱码在线视频| 久久久噜噜噜久久中文字免| 国产精品成人av在线| 亚洲精品在线观看www| 国内揄拍国内精品| 国产日韩视频在线观看| 亚洲国模精品一区| 国产日韩欧美成人| 亚洲性夜色噜噜噜7777| 伊人av综合网| 91成人福利在线| 亚洲香蕉伊综合在人在线视看| 午夜精品久久久久久久99黑人| 欧美肥老太性生活视频| 久久亚洲精品一区二区| 欧美性做爰毛片| 国产一区二区三区网站| 日韩美女免费观看| 92国产精品视频| 日韩精品在线视频| 欧美大片免费看| 欧美一级大片在线观看| 国产精品在线看| 国产亚洲精品久久久久久777| 欧美国产精品日韩| 国产精品99久久99久久久二8| 国产欧美精品一区二区| 91精品国产综合久久香蕉最新版| 91高潮在线观看| 亚洲人成在线免费观看| 国产亚洲美女精品久久久| 国产精品色午夜在线观看| 97精品久久久中文字幕免费| 在线精品高清中文字幕| 亚洲va欧美va国产综合剧情| 91色在线观看| 3344国产精品免费看| 2019中文在线观看| 在线成人中文字幕| 久久久国产91| 日本伊人精品一区二区三区介绍| 日韩成人中文电影| 在线看国产精品| 亚洲亚裔videos黑人hd| 成人观看高清在线观看免费| 九九精品视频在线观看| 成人精品在线视频| 亚洲美女中文字幕| 亚洲社区在线观看| 日韩精品在线视频美女| 亚洲一区二区三| 日韩av成人在线| 国产精品国产三级国产专播精品人| 欧美激情一区二区三级高清视频| 欧美日韩国产精品一区二区三区四区| 色偷偷9999www| 国产噜噜噜噜久久久久久久久|