jmagick是什么?不用我说了吧。
jmagick的安装(基于windows),精简版步骤:
1、下载jmagick-6.2.6-win-im-6.2.8.zip,并把jmagick.jar放到应用的lib下,我放到%JAVA_HOME%/jre/lib/ ext/下,jmagick.dll拷贝到SYSTEM32下;
2、安装ImageMagick-6.2.8-3-Q16-windows-dll.exe软件
3、重新启动机器
麻烦点,但对图片的处理能力,确实超乎想象的
测试:
try{
MagickImage image;
String srcImage = "c://logo.jpg";
ImageInfo info = new ImageInfo(srcImage);
image = new MagickImage(info);
DrawInfo drawInfo = new DrawInfo(new ImageInfo());
drawInfo.setFill(PixelPacket.queryColorDatabase("red"));
drawInfo.setOpacity(0);
drawInfo.setPointsize(18);
drawInfo.setFont("Arial");
drawInfo.setTextAntialias(true);
drawInfo.setGeometry("+10+10");
image.annotateImage(drawInfo);
image.setFileName("c://test.jpg");
image.writeImage(new ImageInfo());
image.destroyImages();
}catch(Exception e){
e.printStackTrace();
}
实现给图片加水印功能(jmagick实现,适用于windows系统)
String original_filename_500 =null;
String watermark_filename = "d://temptest//bokee.png";
final int MARK_H=15; //水印的高
final int NO_MARK=100;//图片的高或者宽
final int BOKEE_MARK=200;//图片宽在200
final int HAS_MARK=300; //图片宽在300以上
final int Y_FONT=10;
for(int i=1;i<=18;i++){ //做实验的时候我循环了18张
original_filename_500="d://temptest//"+i+".jpg";
File file_500=null;
Image img=null;
MagickImage mi_wm=null;
try{
file_500=new File(original_filename_500);
img = ImageIO.read(file_500);
}catch(Exception e){
System.out.println("can not open "+original_filename_500+"500's photo");
}
if(img!=null){
int width = img.getWidth(null);
int height = img.getHeight(null);
if(width<=NO_MARK||height<=NO_MARK){
System.out.println(original_filename_500+" no watermark");
}else{
ImgTools imag = new ImgTools(width, height+MARK_H, bg_filename);
imag.MakeBigByJMagickGB(bg_filename);
ImageInfo ii_orig = new ImageInfo();
ii_orig.setFileName(bg_filename);
MagickImage mi_orig = new MagickImage(ii_orig);
ImageInfo ii_wm_500 = new ImageInfo();
ii_wm_500.setFileName(original_filename_500);
MagickImage mi_wm_500 = new MagickImage(ii_wm_500);
mi_orig.compositeImage(CompositeOperator.AddCompositeOp,mi_wm_500, 0, 0);
mi_orig.setMagick("JPG");
mi_orig.setCompression(CompressionType.JPEGCompression);
final ImageInfo ii_result = new ImageInfo();
ii_result.setQuality(90);
if(width<=BOKEE_MARK&&width>NO_MARK){
DrawInfo aInfo = new DrawInfo(ii_orig);
aInfo.setFill(PixelPacket.queryColorDatabase("gray"));
aInfo.setOpacity(0);
aInfo.setPointsize(9);
aInfo.setFont("Arial");
aInfo.setTextAntialias(true);
aInfo.setText(" http://photo.bokee.com");
int X=(width-NO_MARK)/2;
int Y=height+Y_FONT;
aInfo.setGeometry("+"+X+"+"+Y+"");
mi_orig.annotateImage(aInfo);
}else if(width>BOKEE_MARK&&width<=HAS_MARK) {
DrawInfo aInfo = new DrawInfo(ii_orig);
aInfo.setFill(PixelPacket.queryColorDatabase("gray"));
aInfo.setOpacity(0);
aInfo.setPointsize(9);
aInfo.setFont("Arial");
aInfo.setTextAntialias(true);
String domain="manzhouyexing02";
aInfo.setText(" http://photo.bokee.com/"+domain);
int X=(width-(110+(5*domain.length()-1)))/2;
int Y=height+Y_FONT;
aInfo.setGeometry("+"+X+"+"+Y+"");
mi_orig.annotateImage(aInfo);
}else if(width>HAS_MARK) {
ImageInfo ii_wm = new ImageInfo();
ii_wm.setFileName(watermark_filename);
mi_wm = new MagickImage(ii_wm);
mi_orig.compositeImage(CompositeOperator.AddCompositeOp,mi_wm, 1, height);
DrawInfo aInfo = new DrawInfo(ii_orig);
aInfo.setFill(PixelPacket.queryColorDatabase("gray"));
aInfo.setOpacity(0);
aInfo.setPointsize(9);
aInfo.setFont("Arial");
aInfo.setTextAntialias(true);
String domain="manzhouyexing02";
aInfo.setText(" http://photo.bokee.com/"+domain);
int X=width-105-(5*domain.length()-1)-8;
int Y=height+Y_FONT;
aInfo.setGeometry("+"+X+"+"+Y+"");
mi_orig.annotateImage(aInfo);
}
mi_orig.setFileName("d://temptest//"+i+"_"+1+".jpg");
mi_orig.writeImage(ii_result);
mi_orig.destroyImages();
if(width>HAS_MARK)mi_wm.destroyImages();
}
}
}
} catch (MagickException me) {
me.printStackTrace();
}
System.exit(0);
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对 ImageMagickAPI的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能,它的发行遵循 LGPL协议。
ImageMagick请参考其 官方网站或 ImageMagick学习。