jmagick 对图片处理

jmagick 对图片处理

package sun.image.jmagick;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.text.SimpleDateFormat;
import java.util.Date;

import magick.*;

public class ImageHandle {

static{   
        //不能漏掉这个,不然jmagick.jar的路径找不到  
         System.setProperty("jmagick.systemclassloader","no");   
     }   
       
    /**
      * 压缩图片
      * @param filePath 源文件路径
      * @param toPath    缩略图路径
      */   
    public static void createThumbnail(String filePath, String toPath) throws MagickException{   
         ImageInfo info = null;   
         MagickImage image = null;   
         Dimension imageDim = null;   
         MagickImage scaled = null;   
        try{   
             info = new ImageInfo(filePath);   
             image = new MagickImage(info);   
             imageDim = image.getDimension();   
            int wideth = imageDim.width;   
            int height = imageDim.height;   
            if (wideth > height) {   
                 height = 660 * height / wideth;   
                 wideth = 660;   
             }    
             scaled = image.scaleImage(wideth, height);//小图片文件的大小.  
             scaled.setFileName(toPath);   
             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 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();   
            }   
        }   
    }
  
   /**
    * 图片缩放
    * @param imgPath 原图片路径
    * @param toPath 缩放后的图片路径
    * @param w   缩放后图片宽度
    * @param h   缩放后图片高度
    */
  
   public static void zoomImg(String imgPath, String toPath, int w, int h) throws Exception{
    ImageInfo info = new ImageInfo(imgPath);
    MagickImage image = new MagickImage(info);
    MagickImage scaleImg = image.scaleImage(w, h);
    scaleImg.setFileName(toPath);
    scaleImg.writeImage(info);
   }
  
   /**
    * 水印(文字)
       * @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();   
   }   
     

   


public static void main(String[] args) throws Exception{
   String imgPath = "C:\\images\\bg.jpg";
   String toPath = "C:\\images\\bg1.jpg";
   ImageHandle.cutImg(imgPath, toPath, 200, 200, 50, 200);
   toPath = "C:\\images\\bg2.jpg";
   ImageHandle.zoomImg(imgPath, toPath, 400, 300);
  
   toPath = "C:\\images\\bg3.jpg";
   String text = "我是孙新";
   ImageHandle.initTextToImg(imgPath, toPath, text);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值