Jmagick的安装和使用

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系统)

本例子暂时只能适用于windows
这篇文章 http://blog.sina.com.cn/u/4964dd65010006iv 既适用于windows,也适用于linux
 
 String bg_filename="d://temptest//bg.jpg";
  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;
  try {
   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);
 }
 
这种实现的效果很不错。
大家可以看看下面的例子:
宽在100~200之间
 
宽在200~300之间
宽在300~500之间
如果宽在100或者高在100一下我们将不加水印。
 
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对 ImageMagickAPI的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能,它的发行遵循 LGPL协议。
ImageMagick请参考其 官方网站ImageMagick学习
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值