`

ImageMgick & Jmagick

    博客分类:
  • Web
阅读更多
系统环境:archLinux

ImageMagcik 通过 arch pacman直接安装基本不用配置。

Jmagick 在32位操作系统下libJMagick.so 可以直接用,64位操作系统需要下载源码进行编译,说明:

(看源码中的Install文档有详细说明,autoconf为C 的编译软件需要安装)

> autoconf
>./configure
>make all

然后放到系统usr/lib下。

Java代码:
   static{  
      //不能漏掉这个,不然jmagick.jar的路径找不到  
      System.setProperty("jmagick.systemclassloader","no");  
   }  
		       
     /** 
      * 压缩图片
      * @param filePath 源文件路径
      * @param extName 源文件后缀名
      * @param width 压缩后宽度
      * @param height 压缩后高度
      * @throws MagickException
      */
     public static void createThumbnail(String filePath,String extName, int width,int height) throws MagickException{  
         ImageInfo info = null;  
         MagickImage image = null;  
         MagickImage scaled = null;  
         try{  
        	 //源文件路径加文件名称
        	 String file = filePath + "/original-logo." + extName;
             info = new ImageInfo(file);  
             image = new MagickImage(info);  
             scaled = image.scaleImage(width, height);//小图片文件的大小. 
             
             String slogoName = "/logo." + extName;
             scaled.setFileName(filePath + slogoName);  
             scaled.writeImage(info);  
             
         }finally{  
             if(scaled != null){  
                 scaled.destroyImages();  
             }  
         }    
     }  
		       
     /** 
      * 水印(图片logo) 
      * @param filePath  源文件路径 
      * @param toImg     修改图路径 
      * @param logoPath  logo图路径 
      * @throws MagickException 
      */  
     public static void initLogoImg(String filePath, String toImg, String logoPath) throws MagickException {  
         ImageInfo info = new ImageInfo();  
         MagickImage fImage = null;  
         MagickImage sImage = null;  
         MagickImage fLogo = null;  
         MagickImage sLogo = null;  
         Dimension imageDim = null;  
         Dimension logoDim = null;  
         try {  
             fImage = new MagickImage(new ImageInfo(filePath));  
             imageDim = fImage.getDimension();  
             int width = imageDim.width;  
             int height = imageDim.height;  
             if (width > 660) {  
                 height = 660 * height / width;  
                 width = 660;  
             }  
             sImage = fImage.scaleImage(width, height);  
               
             fLogo = new MagickImage(new ImageInfo(logoPath));  
             logoDim = fLogo.getDimension();  
             int lw = width / 8;  
             int lh = logoDim.height * lw / logoDim.width;  
             sLogo = fLogo.scaleImage(lw, lh);  
   
             sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo,  width-(lw + lh/10), height-(lh + lh/10));  
             sImage.setFileName(toImg);  
             sImage.writeImage(info);  
         } finally {  
             if(sImage != null){  
                 sImage.destroyImages();  
             }  
         }  
     }  
		       
     /** 
      * 水印(文字) 
         * @param filePath 源文件路径 
      * @param toImg    修改图路径 
      * @param text     名字(文字内容自己随意) 
      * @throws MagickException 
      */  
     public static void initTextToImg(String filePath, String toImg,  String text) throws MagickException{  
    	 ImageInfo info = new ImageInfo(filePath);  
         if (filePath.toUpperCase().endsWith("JPG") || filePath.toUpperCase().endsWith("JPEG")) {  
             info.setCompression(CompressionType.JPEGCompression); //压缩类别为JPEG格式  
             info.setPreviewType(PreviewType.JPEGPreview); //预览格式为JPEG格式  
             info.setQuality(95);  
         }  
         MagickImage aImage = new MagickImage(info);  
         Dimension imageDim = aImage.getDimension();  
         int wideth = imageDim.width;  
         int height = imageDim.height;  
         if (wideth > 660) {  
             height = 660 * height / wideth;  
             wideth = 660;  
         }  
         int a = 0;  
         int b = 0;  
         String[] as = text.split("");  
         for (String string : as) {  
             if(string.matches("[\u4E00-\u9FA5]")){  
                 a++;  
             }  
             if(string.matches("[a-zA-Z0-9]")){  
                 b++;  
             }  
         }  
         int tl = a*12 + b*6 + 300;  
         MagickImage scaled = aImage.scaleImage(wideth, height);  
         if(wideth > tl && height > 5){  
             DrawInfo aInfo = new DrawInfo(info);  
             aInfo.setFill(PixelPacket.queryColorDatabase("white"));  
             aInfo.setUnderColor(new PixelPacket(0,0,0,100));  
             aInfo.setPointsize(12);  
             //解决中文乱码问题,自己可以去随意定义个自己喜欢字体,我在这用的微软雅黑  
             String fontPath = "C:/WINDOWS/Fonts/MSYH.TTF";  
             //String fontPath = "/usr/maindata/MSYH.TTF";  
             aInfo.setFont(fontPath);  
             aInfo.setTextAntialias(true);  
             aInfo.setOpacity(0);  
             aInfo.setText(" " + text + "于 " + new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " 上传于XXXX网,版权归作者所有!");  
             aInfo.setGeometry("+" + (wideth-tl) + "+" + (height-5));  
             scaled.annotateImage(aInfo);  
         }  
         scaled.setFileName(toImg);  
         scaled.writeImage(info);  
         scaled.destroyImages();  
     }       
		       
     /** 
      * 切图 
      * @param imgPath 源图路径 
      * @param toPath  修改图路径 
      * @param w        
      * @param h        
      * @param x        
      * @param y 
      * @throws MagickException 
      */  
     public static void cutImg(String imgPath, String toPath, int w, int h, int x, int y) throws MagickException {  
         ImageInfo infoS = null;  
         MagickImage image = null;  
         MagickImage cropped = null;  
         Rectangle rect = null;  
         try {  
             infoS = new ImageInfo(imgPath);  
             image = new MagickImage(infoS);  
             rect = new Rectangle(x, y, w, h);  
             cropped = image.cropImage(rect);  
             cropped.setFileName(toPath);  
             cropped.writeImage(infoS);  
               
         } finally {  
             if (cropped != null) {  
                 cropped.destroyImages();  
             }  
         }  
     }  

(代码中有引用别人的blog,但是忘了从哪引用特此申明)
分享到:
评论

相关推荐

    Jmagick32位的和Jmagick64位的Jmagick.dll,Jmagick.jar

    《Jmagick:32位与64位的差异及应用》 Jmagick是一款将ImageMagick图像处理库与Java平台相结合的扩展库,它允许Java开发者利用强大的ImageMagick功能来处理图像。在Java应用程序中,Jmagick通过Jmagick.dll动态链接...

    jmagick jmagick.jar jmagick资料

    里面包括jmagick 所需所有文件,jmagick.dll,jmagick.jar 还有安装文件, 以及linux安装说明! jmagick jmagick.jar jmagick资料 jmagick缩略图 jmagick jmagick.jar jmagick资料 jmagick缩略图

    jmagick安装和配置

    **JMagick安装与配置详解** JMagick是一款强大的Java接口,它允许Java应用程序与ImageMagick图像处理库进行交互,从而实现丰富的图像操作功能。本文将详细介绍如何在Java环境中安装和配置JMagick,以及如何使用提供...

    jmagick.jar 用法

    **JMagick 概述** JMagick 是一个 Java 包装器库,它提供了对 ImageMagick 图像处理库的访问。ImageMagick 是一个功能强大的跨平台图像处理工具,而 JMagick 则是将这些功能引入 Java 应用程序的桥梁。通过 JMagick...

    jmagick-win-5.5.7-Q8.zip

    《Java环境下的JMagick工具详解与应用》 在Java开发中,图像处理是一个不可或缺的部分。JMagick作为Java与ImageMagick之间的桥梁,提供了一种在Java环境中使用ImageMagick的强大功能。本文将深入探讨JMagick的核心...

    jmagick6.4.0

    **JMagick 6.4.0:Java与ImageMagick的强大结合** JMagick是ImageMagick图像处理库的一个Java接口,它为Java开发者提供了一种高效且灵活的方式来处理和操作图像。ImageMagick是一个功能丰富的开源跨平台工具集,...

    jmagick.zip

    《JMagick与ImageMagick在Java环境中的应用》 JMagick与ImageMagick是两个在图像处理领域中广泛使用的开源库,尤其在Java环境中,它们为开发者提供了强大的图像处理功能。本文将深入探讨这两个工具的核心概念、功能...

    jmagick-win-6.3.9

    《JMagick:Java 图像处理的利器》 在IT领域,图像处理是不可或缺的一部分,尤其是在网站开发、移动应用和数据分析等场景。JMagick,一个与标题“jmagick-win-6.3.9”相对应的工具,是Java平台上的一个强大扩展,它...

    jmagick-win-6.3.9-Q16

    《JMagick:Java图像处理的强大工具》 在IT领域,图像处理是一项不可或缺的技术,尤其在网站开发、移动应用和数据分析等方面。JMagick作为Java平台上的一个图像处理库,为开发者提供了强大的功能,使他们能够高效地...

    jmagick 例子

    《JMagick:Java 图像处理的利器与内存管理策略》 在计算机视觉和Web开发领域,图像处理是一项至关重要的任务。Java作为一种广泛使用的编程语言,提供了多种图像处理库,其中JMagick是一个非常实用的工具,它为Java...

    JMagick图片处理

    **JMagick图片处理**是图像操作的重要工具,它是一个Java接口,用于ImageMagick库,使得在Java环境中可以方便地进行图像处理。这个技术涵盖了多个关键知识点,包括创建缩略图、添加水印、切图以及压缩图片,这些都是...

    jmagick-6.2.4-1-IM-6.2.5.zip

    标题中的"jmagick-6.2.4-1-IM-6.2.5.zip"指的是JMagick的一个特定版本,这是一个Java绑定的ImageMagick库,用于处理图像操作和转换。ImageMagick是一个开源的跨平台命令行工具集,广泛用于在各种文件格式之间进行...

    jmagick 软件、安装说明(window和linux两个版本)

    **JMagick软件详解与安装指南** JMagick是一款强大的Java接口,它允许Java应用程序直接访问ImageMagick的图像处理功能。ImageMagick是一个广泛使用的跨平台图像处理库,能够读取、转换和写入多种图像格式。通过...

    JMagick-6.0.4-0.tar

    JMagick-6.0.4-0.tar 下载

    JMagick-5.5.6-0.tar.gz

    《JMagick-5.5.6-0:Java Web中的图形处理利器》 在Java Web开发中,图像处理是一项不可或缺的功能,无论是用于网站设计、数据可视化还是用户上传的图片管理,都需要高效的图像处理库来支持。JMagick-5.5.6-0.tar....

    ImageMagick-6.3.9+jmagick组合

    ImageMagick是一款强大的开源图像处理工具,而JMagick是其与Java平台的桥梁,使得在Java应用程序中能够调用ImageMagick的功能。这个“ImageMagick-6.3.9+jmagick组合”指的是ImageMagick的一个特定版本6.3.9与...

    jmagick 用法

    **JMagick 用法详解** JMagick 是一个 Java 的图像处理库,它提供了对 ImageMagick 图像处理库的 Java 接口。ImageMagick 是一个强大的跨平台命令行工具集,用于读取、转换和写入多种格式的图像。通过 JMagick,...

    jmagick.jar java图像应用

    jmagick.jar java图像应用

    jmagick linux file

    jmagick image generate or operator library

    jmagick图片处理

    jmagick处理图片,图片高质量压缩,图片加水印。

Global site tag (gtag.js) - Google Analytics