1 Jmagic的基本安装和使用
1) 下载和安装文件
下载安装包 ImageMagick-6.8.0-4-Q16-windows 和jmagick-win-6.3.9-Q8
默认安装在C:\Program Files\ImageMagick-6.3.9-Q8 中,讲此目录当中的所有dll文件拷贝到WINDOWS\system32文件夹下。并将jmagick-win-6.3.9-Q8.zip这个压缩包中的jmagick.dll文件拷贝到C:\Program Files\ImageMagick-6.3.9-Q8和jdk的bin这两个目录中。
2) 配置路径
将C:\Program Files\ImageMagick-6.3.9-Q8添加到PATH环境变量中
3) 在工程中引用
Project->properties->java Build Path->Add JARs 添加jmagick.jar
使用时,方法中先写System.setProperty("jmagick.systemclassloader","no");在系统初始化的时候,若 jmagick.systemclassloader这个属性值为空或者为yes的时候,执行
ClassLoader.getSystemClassLoader().loadClass("magick.MagickLoader").newInstance();
其他执行System.loadLibrary("JMagick");
我们这里需要调用库的JMagick所以在程序运行的时候要先将属性值设置为 “no”
4)参考文档 http://downloads.jmagick.org/jmagick-doc/
2读取图片
a)读取本地文件
String pic=”D://pic.png”;
ImageInfo srcInfo = new ImageInfo(pic);
MagickImage srcImage = new MagicImage(srcInfo);
b)读取url文件
String url = “**********”;
ImageInfo srcInfo = new ImageInfo(url);
MagickImage srcImage = new MagicImage(srcInfo);
读取的文件不存在抛异常:No image to scale
3 缩放图片
MagickImage resultImage = srcImage.scaleImage(int cols,introws);
其中resultImage为结果图片,srcImage为原图。Cols为目标图片的宽width值,rows为目标图片的高度height值。当高度和宽度超过目标图的时候,会做放大处理。
不同于BufferedImage的缩放用法
BufferedImageresultImage=null;
BufferedImage srcImage = ImageIO.read(picFile);
resultImage.getGraphics().drawImage(srcImage,startX,startY,
width,height,null);
其中当宽度width和height超过原图时会不做处理。
4 图片叠加
基本用法:
BackgroundImage.compositeImage(compOp,srcImage,xOff,yOff)
其中 backgroundImage为底图 MagickImage
SrcImage为透明图MagickImage
compOp为叠加图片的参数。
(xOff,yOff)为透明图在底图上叠加的起点坐标
boolean | compositeImage(int compOp,MagickImage compImage, int xOff, int yOff) |
在文档中如上定义。其中compOp的值为CompositeOperator中定义的参数。不同的底色用法参数值选取也不同。这里介绍几种常用的方法
4.1 背景图片上叠加非透明图片
常用案例: 给照片加框,图片底部添加商业logo信息
backGroundImage.compositeImage(CompositeOperator.SrcOverCompositeOp,srcImage,xOff,yOff)
4.2 背景图片上叠加透明底图片
常用案例:背景图片上添加水印和logo信息
backGroundImage.compositeImage(CompositeOperator. PlusCompositeOp,srcImage,xOff,yOff)
4.3 蒙版效果
透明底水印上非透明部分取自于背景图。透明部分不变
backGroundImage.compositeImage(CompositeOperator. AtopCompositeOp
,srcImage,xOff,yOff)
区别于OutCompositeOp 透出的彩色部分为黑白。改变了grb的值。
5 图片剪切
Rectangl chopInfo = new Rectangle(startX,startY,width,height);
MagickImage resultImage = scaledPicImage.cropImage(chopInfo);
6 图片旋转
MagickImage resultImage =templateImage.rotateImage(degrees);
其中double degrees为旋转的角度正值时顺时针旋转,负数时逆时针旋转
旋转得到图resultImage是长宽为原图*(cos(degrees)+sin(degrees))的图片,多出的部分为白色。
7 保存结果
resultImage .setFileName(“newName”);
resultImage .writeImage(srcInfo);
resultImage .destroyImages();