`

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,但是忘了从哪引用特此申明)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics