Jmagick切图和windows下面jmagick的安装

现在介绍使用Jmagick的使用,可以生成质量很好的缩略图,当然还有其他很多图像处理的方法。

   首先jmagick(http://www.yeo.id.au/jmagick/)是ImageMagick(http: //www.imagemagick.org/)的java 应用的接口。所以要先安装ImageMagick应用程序,你的java应用才能使用,在主页上你可以轻松找到下载的链接。

   1。下载jmagick,imagemagick

   2.安装ImageMagick,网站上有安装方法(windows,unnix),我只在win上做了安装,安装以后把安装目录下所有的dll文件copy到windows/system32/目录下。

   3。下载的jmagick包含jmagick.jar,jmagick.dll文件,jmagick.dll需要copy到windows/system32/目录下。

   4。web应用如果部署到tomcat下,那么最好在catalina.bat文件中改变如下设置

set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx768M -XX:MaxPermSize=128M -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="${catalina.base}/conf/logging.properties"

   避免heap溢出的问题,参数看你自己的机器而定。( -Xms256M -Xmx768M -XX:MaxPermSize=128M )

   5。还要注意如果部署到web应用,你在使用的class里面需要

       System.setProperty("jmagick.systemclassloader","no");

     要不然会报出UnsatisfiedLinkError: no JMagick injava.library.path.
例子:
import magick.CompressionType;
import magick.ImageInfo;
import magick.MagickException;
import magick.MagickImage;
import magick.PreviewType;
import java.awt.Rectangle;
public class ImgTools {
private int width = 1;
private int height = 1;
private ImageInfo info;
public static int HEAD_SIZE = 48;
public static int ICON_SIZE = 66;
private static int SMALL_SIZE = 120;
public static int LARGE_SIZE = 320;
    public static int HUGE_SIZE = 500;
    public ImgTools(int width, int height, String oldFileName) {
   try {
    System.setProperty("jmagick.systemclassloader","no");
    info = new ImageInfo(oldFileName);
    info.setCompression(CompressionType.JPEGCompression);
    info.setPreviewType(PreviewType.JPEGPreview);
    this.width = width;
    this.height = height;
   } catch (MagickException e) {
    System.out.println("MagickException in Upload Photo");
    e.printStackTrace();
   }
}
    //120*120的图片
public void MakeSmallByJMagick(String newFileName) {
        try {
    info.setQuality(90);
         MagickImage image = new MagickImage(info);
     image.profileImage("*", null);
     MagickImage scaled = null;
     double proportion = 0;
    if (width == height) {
     scaled = image.scaleImage(SMALL_SIZE, SMALL_SIZE);// 小图片文件的大小.
    } else {
     if (width > height) {
      if (width > SMALL_SIZE) {
       proportion = (double)SMALL_SIZE / width;
      } else {
       proportion = width / (double)SMALL_SIZE;
      }
      scaled = image.scaleImage(SMALL_SIZE, (int) (height * proportion));// 小图片文件的大小.
     } else {
      if (height > SMALL_SIZE) {
       proportion = (double)SMALL_SIZE / height;
      } else {
       proportion = height / (double)SMALL_SIZE;
      }
      scaled = image.scaleImage((int) (width * proportion),SMALL_SIZE);// 小图片文件的大小.
     }
    }
    scaled.setFileName(newFileName);
         scaled.writeImage(info);
        } catch (MagickException e) {
        System.out.println("MagickException in Upload Photo");
    e.printStackTrace();
   }
}
    //320*320和500*500的图片
public void MakeBigByJMagick(String newFileName,int size){
        try {
    info.setQuality(90);
      MagickImage image = new MagickImage(info);
         image.profileImage("*", null);
     MagickImage scaled = null;
    double proportion = 0;
    if (width == height) {
     if (width > size) {
       proportion = (double)size / width;
       scaled = image.scaleImage((int) (width * proportion), (int) (width * proportion));
      } else {
       scaled = image.scaleImage(width, height);
      }
    } else {
     if (width > height) {
      if (width > size) {
       proportion = (double)size / width;
       scaled = image.scaleImage(size, (int) (height * proportion));
      } else {
       scaled = image.scaleImage(width, height);
      }
     } else {
      if (height > size) {
       proportion = (double)size / height;
       scaled = image.scaleImage((int) (width * proportion), size);
      } else {
       scaled = image.scaleImage(width, height);
      }
     }
    }
         scaled.setFileName(newFileName);
         scaled.writeImage(info);
        } catch (MagickException e) {
        e.printStackTrace();
        System.out.println("MagickException in Upload Photo");
   }
}
    //66*66和48*48的图片
public void MakeLittleByJMagick(String newFileName,int size) {
   Rectangle rect = null;
   if(width < size && height < size){
    rect = new Rectangle(0,0,size,size);
   }else if(width < size || height < size){
    rect = new Rectangle(0,0,size,size);
   }else{
    if(width < height){
     int beginPoint = (height - width) / 2 ;
     rect = new Rectangle(0,beginPoint,width,width);
    }else{
     int beginPoint = (width - height) / 2 ;
     rect = new Rectangle(beginPoint,0,height,height);
    }
   }
   try {
    info.setQuality(85);
    MagickImage image = new MagickImage(info);
    image.profileImage("*", null);
    MagickImage cropped = image.cropImage(rect).scaleImage(size,size);
    cropped.setFileName(newFileName);
    cropped.writeImage(info);
   } catch (MagickException e) {
    System.out.println("MagickException in Upload Photo");
    e.printStackTrace();
   }
  
}
}

你可能感兴趣的:(java,windows,String,image,upload,null)