一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - JMagick實現(xiàn)基本圖像處理的類實例

JMagick實現(xiàn)基本圖像處理的類實例

2019-12-24 13:09紅薯 JAVA教程

這篇文章主要介紹了JMagick實現(xiàn)基本圖像處理的類,實例分析了java圖像處理的相關(guān)技巧,需要的朋友可以參考下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/**
 * 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程序設(shè)計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产亚洲精品第一综合另类 | 午夜理论片YY4399影院 | 青青草原国产视频 | 青青草在观免费 | 性夜影院爽黄A爽免费动漫 性色欲情网站IWWW九文堂 | 5566中文字幕亚洲精品 | 久久一本岛在免费线观看2020 | 国内精品中文字幕 | 好吊妞视频998www | 久久精品国产免费 | 国产精品九九热 | 欧美a欧美1级 | 久久青草免费91线频观看站街 | 十六以下岁女子毛片免费 | 黑人巨茎大战欧美白妇 | 性色香蕉AV久久久天天网 | 极品蜜桃臀美女啪啪 | 日本在线视频播放 | 亚洲精品综合一二三区在线 | 69p69国产精品| 好大用力深一点视频 | 范冰冰a级一级特级毛片 | 欧美视频精品一区二区三区 | 国产欧美日韩在线不卡第一页 | 四虎永久| 国产成人夜色影视视频 | 五月色婷婷在线影院 | 欧美高清在线精品一区 | 精品无人区乱码1区2区3区在线 | 欧美一区二区三区视视频 | 国产99久久久国产精品成人 | 99re热精品这里精品 | gogort人体的最新网站 | 满溢游泳池免费土豪全集下拉版 | 欧美一区二区三区免费看 | 欧美高清在线不卡免费观看 | 精品无码久久久久久久动漫 | 亚洲精品乱码久久久久久蜜桃图片 | 国产毛片在线高清视频 | 欧美xxxxx九色视频免费观看 | 含羞草传媒网站免费进入欢迎 |