博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Jmagick的使用例子
阅读量:6226 次
发布时间:2019-06-21

本文共 5054 字,大约阅读时间需要 16 分钟。

jar包地址  http://downloads.jmagick.org/6.3.9/      




我在window下使用的是    jmagick-win-6.3.9-Q8.zip 和  ImageMagick-6.3.9-0-Q8-windows-dll.exe 


      linux下使用的是         JMagick-6.2.6-0.tar.gz    和 ImageMagick-x86_64-pc-linux-gnu.tar.gz             







doc地址   http://downloads.jmagick.org/jmagick-doc/ 




windows 


一 .  安装 ImageMagick-6.3.9-0-Q8-windows-dll.exe 




二 .  将 安装目录下 “C:\Program Files\ImageMagick-6.3.9-Q8\ ”(按自己所安装的目录找) 下的所有dll文件 copy 到系统盘下的 “C:\WINDOWS\system32\”文件夹里 




三 .  配置环境变量 


     再环境变量path里添加新的值 “C:\Program Files\ImageMagick-6.3.9-Q8” 




四 .  解压jmagick-win-6.3.9-Q8.zip 


       将 jmagick.dll 复制到系统盘下的 “C:\WINDOWS\system32\”文件夹里 


      将 jmagick.jar 项目lib下 




linux 


  朋友配的 得自己去网上找资料 










操作范例 


Java代码 

package com.utils;  


import java.awt.Dimension;  

import java.awt.Rectangle;  

import java.text.SimpleDateFormat;  

import java.util.Date;  




import magick.CompositeOperator;  

import magick.CompressionType;  

import magick.DrawInfo;  

import magick.ImageInfo;  

import magick.MagickException;  

import magick.MagickImage;  

import magick.PixelPacket;  

import magick.PreviewType;  


public class Aa {  


      

    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 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();  

            }  

        }  

    }  

}

转载地址:http://rpina.baihongyu.com/

你可能感兴趣的文章
HDU_1505_矩阵中的最大矩形_dp
查看>>
HDU_1398_母函数
查看>>
leetcode_1039. Minimum Score Triangulation of Polygon_动态规划
查看>>
mysql 将时间戳与日期时间的转换
查看>>
个人作业-Week2 案例分析
查看>>
SVN提交错误及使用技巧
查看>>
服务器程序和应用程序
查看>>
hibernate执行过程
查看>>
C++专题(一)
查看>>
博客园。侧边公告代码
查看>>
[codevs3118]高精度除法<高精度>
查看>>
学JS的心路历程-闭包closure
查看>>
本周总结
查看>>
苹果企业账号申请
查看>>
Problem O
查看>>
胜利大逃亡
查看>>
畅通工程(并查集找根节点)
查看>>
【工具使用】sublime text3
查看>>
SQL Server查询优化器的工作原理
查看>>
关于成长的一点碎碎念
查看>>