1. 安装过程(如图所示)

若想使用imagemagick,需要安装各种依赖库、一步小心,可能就会安装错误。其中ImageMagick的访问地址为: http://www.imagemagick.org/script/index.php

2、安装支持库

Linux服务器如果没有安装Jpeg v6b、libPng、FreeType库,要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片,字体文件也读不了.(本次安装以redHat为例,进行ImageMagick的安装)

----freetype-2.4.4.tar.gz  字体引擎,生产高质量的字形影像输出,(例如彩色文本渲染,挖空等等)。

----zlib-1.2.5.tar.gz  是zlib通用压缩库,图形格式png使用zlib中的deflate压缩算法。

---- jpegsrc.v9a.tar.gz 要处理 jpeg 的库, jpegsrc.v7.tar.gz是必需,还是从源码安装

----libpng-1.5.10.tar.gz 要处理 png 的库,则 libpng-1.5.10.tar.gz 是必需的,还是从源码安装
----libjpeg   支持JPEG v1格式(jpegsrc.v8b.tar.gz)

以下可选:

----jasper-1.900.1.zip   支持JPEG2000(文件扩展名是 .jp2.j2c)
----tiff-3.8.0.tar.gz   支持tif文件  这个用不到,不要安装了

3.安装各种软件

安装jpeg包(建议使用jpegsrc.v8b.tar.gz,下载地址可以从网上查找

执行的命令:

su root

检查是否已经安装过了

[root@oracle tpl]# rpm -qa | grep jpeg

openjpeg-libs-1.3-7.el6.x86_64

libjpeg-6b-46.el6.x86_64tar -zxvf jpegsrc.v8b.tar.gz

[root@oracle tpl]# rpm -e --allmatches --nodeps libjpeg-6b-46.el6.x86_64

[root@oracle tpl]# tar -zxvf jpegsrc.v8b.tar.gz
[root@oracle tpl]# cd jpeg-8b/
[root@oracle jpeg-8b]# ./configure --enable-shared --enable-static ; make ; make install

安装zlib包:

下载地址:http://www.zlib.net/

ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

是zlib通用压缩库,图形格式png使用zlib中的deflate压缩算法,命令如下:

[root@oracle tpl]# rpm -qa | grep zlib

zlib-1.2.3-25.el6.x86_64

[root@oracle tpl]# rpm -e --allmatches --nodeps zlib-1.2.3-25.el6.x86_64

[root@oracle tpl]# tar -zxvf zlib-1.2.5.tar.gz
[root@oracle tpl]# cd zlib-1.2.5
[root@oracle zlib-1.2.5]# ./configure
[root@oracle zlib-1.2.5]#make
[root@oracle zlib-1.2.5]#make install

安装png包:

下载地址:http://sourceforge.net/projects/libpng/

ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

http://www.libpng.org/pub/png/pngcode.html

命令:

[root@oracle zlib-1.2.5]# rpm -qa | grep png

libpng-1.2.44-1.el6.x86_64

[root@oracle zlib-1.2.5]# rpm -e --allmatches --nodeps libpng-1.2.44-1.el6.x86_64

[root@oracle zlib-1.2.5]#tar -xzvf libpng-1.2.12.tar.gz
[root@oracle zlib-1.2.5]#cd libpng-1.2.12

[root@oracle zlib-1.2.5]#./configure (注意:此处不要使用网上的通过cp script下的makefile的方式执行的那种,不然在安装ImageMagick的时候出错)
[root@oracle zlib-1.2.5]#make
[root@oracle zlib-1.2.5]#make install

安装freetype

下载地址:http://www.freetype.org/

ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

命令:

[root@oracle zlib-1.2.5]# rpm -qa | grep freetype

[root@oracle zlib-1.2.5]# tar –zxvf freetype-2.4.4.tar.gz

[root@oracle zlib-1.2.5]#./configure
[root@oracle zlib-1.2.5]# make
[root@oracle zlib-1.2.5]# make install

安装Tiff包

下载地址:ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates

ftp://ftp.remotesensing.org/libtiff/

安装后才能处理TIFF格式图片

命令:

tar -xzvf tiff-3.8.0.tar.gz   
cd tiff-3.8.0  
./configure   
make   
make install

我安装完成后,在命令行处理图片,报错:libtiff.so.3: cannot open shared object file: No such file ordirectory

这个模块也用不到, 就不要安装了.

安装jasper包:

下载地址:http://www.ece.uvic.ca/~mdadams/jasper/

安装后才能处理JPEG2000格式图片(文件扩展名是 .jp2 .j2c)

命令如下:

unzip jasper-1.900.1.zip   
cd jasper-1.900.1  
CFLAGS=-fPIC  ./configure   
make CFLAGS=-fPIC   
make  CFLAGS=-fPIC install

三、Linux上用源码编译安装ImageMagick与jmagick

------------------------------------------------------------------------------------------------------------------

下载ImageMagick和JMagick
Jmagick在ImageMagick官网首页左侧菜单的Program Interfaces菜单中找到jmagick。进入jmagick的主页。

我们使用6.4版本,下载地下是:http://downloads.jmagick.org/6.4.0/ 
我们下载:
ImageMagick-6.4.0-0.tar.gz
jmagick-6.4.0-src.tar.gz

文档在:http://downloads.jmagick.org/jmagick-doc/

解压ImageMagick,查看ImageMagick的安装说明文件Install-unix.txt就知道怎么安装ImageMagick了。
解压jmagick,查看jmagick的安装说明文件INSTALL就知道怎么安装jmagick了。

4.安装ImageMagick
修改文件执行权限:chmod -R 755 文件名
命令如下:

tar zvxf ImageMagick-6.4.0-0.tar.gz
cd ImageMagick-6.4.0-0

./configure CC=gcc CXX=c++ CPPFLAGS='-I/usr/local/include' LDFLAGS='-L/usr/local/lib -R/usr/local/lib' --with-quantum-depth=8 --enable-shared --without-perl

make CFLAGS=-fPIC   (红色字体的是必须的)
make install

若想卸载,可以使用:make uninstall

另外,关于configure中的说明,如下:

configure参数说明:
--enable-shared 编译成共享库
--disable-static 不编译成静态库
--disable-openmp 禁用多线程,使用多线程性能并没有提高,但CPU占用达到了100%,所以禁用了。
--with-quantum-depth=8 使用8位色深。我的1200万像素数码相机,照出的图片就是8位色深。
--with-windows-font-dir=目录 ,指明字体文件的目录(后面将人工复制中文字体文件到这个目录)

configure 完成后,一定要检查IM支持的图片格式种类,configure 完成后出会输出类似如下图的信息,请仔细检查。(信息不一定和下图一样,请根据实际情况自行分析)

验证configuration情况:identify -list configure

验证支持的图片格式:identify -list format

关于Q8,Q16,Q32的说明:(建议使用8,现在数码相机照的相片,每一种颜色就是8位深,3种颜色就是24位,所以选8)
支持的参数有3种,分别是 8, 16, or 32。默认值是16。
Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum
Q32表示:32-bits per pixel quantum
使用16-bit per pixel quantums在处理图片时比8-bit慢15%至50%,并须要更多的内存。
处理一张1024x768像素的图片8-bit要使用3.6M内存,16-bit要使用7.2M内存。计算方法是: (5 * Quantum Depth * Rows *Columns) / 8

使用convert –version检查是否已经安装成功了

若出现下面的输出说明已经安装成功了

Version: ImageMagick 6.4.0 09/25/16 Q8 http://www.imagemagick.org

Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC

使用convert -list format检查支持的文件类型。检查列表中是否有JPG和PNG格式的。若没有这两个文件,说明是jpeg包和png包没装好,因为ImageMagick依赖jpeg包和png包。

ImageMagick的使用(参考百度:http://jingyan.baidu.com/article/948f59245ec02dd80ff5f989.html):

参考命令:

转换格式命令:

# convert -format demo.jpg demo.png

将jpg转换成png

指定大小缩放:

# convert -resize "500x300>" demo.jpg  demo_500.jpg

如果图片比500x300小就保持原样,以防小图片被放大失真

去除多余信息:

#convert -strip input.jpg output.jpg

将多余的信息去除:摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。

压缩比:

#convert -quality 75% demo.jpg demo_75.jpg

ImageMagick的命令很多 具体可以查看官方手册

http://www.imagemagick.org/script/command-line-tools.php

5.安装jdk,参考博文如下:
安装jdk,参考博文:http://blog.csdn.net/tototuzuoquan/article/details/18188109

6、安装jmagick

提醒:JMagick不适合在Web应用中使用,请参看:JMagick的JNI-hazard问题  
修改文件执行权限:chmod -R 755 文件名

命令如下:

tar zvxf jmagick-6.4.0-src.tar.gz
cd 6.4.0
./configure --prefix=/usr/local/lib/jmagick-6.4.0 --with-java-home=/usr/java/jdk1.6.0_45 -with-magick-home=/usr/local/lib/ImageMagick-6.4.0
make all
make install

下面几步测试可以不执行
make simpletest 因没有Junit的jar包报2个错误,不用管。
make test
make javadoc

安装成功后,在/usr/local/lib/jmagick-6.4.0/lib/有一个jmagick-6.4.0.jar文件,在你的java项目中就使用这个jar文件处理图片。
记住jmagick-6.4.0.jar是使用前面你指定的jdk1.6编译出来的,所以不能在jdk为1.5的环境下使用jmagick-6.4.0.jar。
如果你执行了make javadoc,在/usr/local/lib/jmagick-6.4.0/share/doc目录下就有文档。

另外:部署项目后,会发现会报: Could not initializeclass magick.ImageInfo的问题,

解决办法

步骤1::进入/usr/local/lib/jmagick-6.4.0

[root@oracle lib]# cd /usr/local/lib/jmagick-6.4.0/lib

[root@oracle lib]# ls

jmagick-6.4.0.jar  libJMagick-6.4.0.so  libJMagick.so

[root@oracle lib]#cp jmagick-6.4.0.jar /newdisk/UCMSServer/tomcat/bin/    (将jmagick-6.4.0.jar放到tomcat中的bin中一份)

cp /newdisk/UCMSServer/tomcat/webapps/app-tpl-webapp/WEB-INF/lib/jmagick-6.4.0.jar /usr/java/jdk1.6.0_45/jre/lib/ext   (将jar包拷贝一份到jdk中的jre/lib/ext中)

注意把自己工程lib包中的jmagick的jar包也改成jmagick-6.4.0.jar。

步骤2:编写Test.java

public class Test {

public static void main(String[] args) {

System.out.println(System.getProperty("java.library.path"));

}

}

执行命令:javac Test.java   java Test

[root@oracle tpl]# javac Test.java

[root@oracle tpl]# java Test

/usr/java/jdk1.6.0_45/jre/lib/amd64/server:/usr/java/jdk1.6.0_45/jre/lib/amd64:/usr/java/jdk1.6.0_45/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

[root@oracle tpl]# cd /usr/local/lib/jmagick-6.4.0/lib

[root@oracle lib]# ls

jmagick-6.4.0.jar  libJMagick-6.4.0.so  libJMagick.so

风别把上面的.so文件放到/usr/java/jdk1.6.0_45/jre/lib/amd64/server:/usr/java/jdk1.6.0_45/jre/lib/amd64:/usr/java/jdk1.6.0_45/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib中的各包下,命令如下:

[root@oracle lib]# cp *.so /usr/java/jdk1.6.0_45/jre/lib/amd64/server

[root@oracle lib]# cp *.so /usr/java/jdk1.6.0_45/jre/lib/amd64

[root@oracle lib]# cp *.so /usr/java/packages/lib/amd64

[root@oracle lib]# cp *.so /usr/lib64

[root@oracle lib]# cp *.so /lib64

[root@oracle lib]# cp *.so /lib

[root@oracle lib]# cp *.so /usr/lib

最后重启tomcat,重新访问自己的工程,发现裁剪效果正常了。

四、在windows上安装ImageMagick与jmagick

--------------------------------------------------------------------------

在windows安装很简单,关于Q8与Q16区别,前有说明是一样的。

有动态版(dll),有静态版(static),建议使用动态版。

如果安装Q8,请使用文件:

ImageMagick-6.3.9-0-Q8-windows-dll.exe

jmagick-win-6.3.9-Q8.zip

如果安装Q16,请使用文件:

ImageMagick-6.3.9-0-Q16-windows-dll.exe

jmagick-win-6.3.9-Q16.zip

我们以Q8为例:

1、运行ImageMagick-6.3.9-0-Q8-windows-dll.exe,一路下一步,ImageMagick就安装好了

2、解压jmagick-win-6.3.9-Q8.zip,把jmagick.dll放入system32,在你的java项目中使用jmagick.jar包处理图片。

当将dll放到system32中后、需要重启一下电脑。

将jmagick-6.2.4.jar放到tomcat\lib中。

Maven中在pom文件中添加上依赖:

<dependency>

<groupId>jmagick</groupId>

<artifactId>jmagick</artifactId>

<version>6.2.4</version>

</dependency>

六、常见问题以及解决方法:

--------------------------------------------------------------------------

1、System.out.println(System.getProperty("java.library.path")). 
直接用System.out.println(System.getProperty("java.library.path")). 
打印出当前环境的路径,然后再把jmagick.dll或jmagick.so 复制到其中的一个路径文件夹中问题解决。

2、magick.MagickException: No image to scale
版本不匹配,要像下面这们,都是同一个版本号
ImageMagick-6.4.0-0.tar.gz
jmagick-6.4.0-src.tar.gz

3、magick.MagickException: Unable to retrieve handle
要调用 magick.MagickImage.destroyImages() 来关闭

4、no decode delegate for this image format
使用:identify -list format
判断有支持几种图片格式,没有的则需要安装对应的格式库

5、单线程转换每张图片大概50ms,两个线程却需要500ms
用convert --version  命令查看
看是否出现openMP字样,出现的话,是因为机器不支持openMP导致的。
需要重新编译./configure --disable-openmp  在进行安装

首先检查一下电脑里已经安装的ImageMagick版本:
convert -version

6、Exceptionin thread "main" java.lang.UnsatisfiedLinkError:C:\WINDOWS\system32\jmagick.dll: Can't find dependent libraries

我在Windows xp上按照上面的流程安装完成,按理说应该没有问题了,但出现了以上错误。

我打开Eclipse已工作数个小时,然后在开发机器(我本机)Windows xp上安装ImageMagick-6.3.9-0-Q16-windows-dll.exe。也把jmagick.dll放入system32,在你的java项目中使用jmagick.jar包处理图片。

就这么几步当然不会错,但在运行程序时还是出现了上面的错误。

解决:重启Eclipse。加载新的环境变量。

 

七、代码实现

package com.xxx.tpl.utils;

 

import java.awt.Dimension;

import java.awt.Point;

import java.awt.Rectangle;

import java.io.File;

import java.io.IOException;

 

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 JmagickUtil {

         public static void main(String[] args) throws MagickException, IOException {

 

                   // test for function imageResize

 

                   JmagickUtil.imageResize("E:/UCMSServer/tomcat/webapps/temp/tpl/snapshot/2016/9/25955ea769ff47ada6b84f7b39cee904.png",

                                                     "D:/Installed/tomcat/webapps/tpl/special/2016/9/d26076f602284c3eac1abaa71d2378b2/thumbnail/big/2016/9/25955ea769ff47ada6b84f7b39cee904.png", 160, 160);

                   // JMagicjWrapper.imageResize("pics.jpg", "reSize250x200.jpeg", 250,

                   // 200);

                   // JMagicjWrapper.imageResize("pics.jpg", "reSize50x50.jpg", 50, 50);

                   // JMagicjWrapper.imageResize("pics.jpg", "reSize120x120.bmp", 120,

                   // 120);

                   // JMagicjWrapper.imageResize("pics.jpg", "reSize.tif", 20, 30);//not

                   // create file

                   //           

 

                   // test for function createWaterPrintByImg

//               JmagickUtil.createWaterPrintByImg("f://1.jpg", "f://4.jpg",

//                                 "f://watermark.gif", new Point(0, 0));

                   // JMagicjWrapper.imageResize("wpl.gif", "logo250x200.gif", 250, 200);

                   // Because file "wpl.gif" may not be release, the later function cause a

                   // error, can not open file handle.

                   // JMagicjWrapper.createWaterPrintByImg("pics.jpg", "wpl.gif",

                   // "logoFull.jpg", new Point(1680,1050));//not create file

                   // JMagicjWrapper.createWaterPrintByImg("pics.jpg", "wpl.gif",

                   // "logoExt.jpg", new Point(2000,1000));//not create file

 

                   // test for function createWaterPrintByText

                   // This function can not handle Chinese Character, I'll continue to

                   // takle the issue

                   // JMagicjWrapper.createWaterPrintByText("pics1.jpg", "wpt.gif",

                   // "For Test", new Point(300,300), 100);

         }

 

         private static final String[] Type = { ".JPG", ".JPEG", ".BMP", ".GIF",

                            ".PNG" };

 

         public static boolean checkType(String path) {

                   for (int i = 0; i < Type.length; i++) {

                            if (path.toUpperCase().endsWith(Type[i])) {

                                     return true;

                            } else {

                                     continue;

                            }

                   }

                   return false;

         }

 

         /**

          * 改变图片大小

          *

          * @param filePath

          *            原图片位置 toPath 新图片位置 width 新图片的宽度 height 新图片的高度

          * @return

          * @throw

          * @author  2010-8-11

          * @throws IOException

          */

         public static void imageResize(String filePath, String toPath, int width,

                            int height) throws MagickException, IOException {

                   //必须写,否则jmagick.jar的路径找不到

        System.setProperty("jmagick.systemclassloader","no");

                  

        File fileOri = new File(filePath);

        File fileDes = new File(toPath);

        if (!fileOri.exists()) {

                            return;

                   }

        if (!fileDes.exists()) {

                            String parentPath = fileDes.getParent();

                            new File(parentPath).mkdirs();

                            fileDes.createNewFile();

                   }

       

                   ImageInfo info = null;

                   MagickImage image = null;

                   Dimension imageDim = null;

                   MagickImage scaled = null;

 

                   if (!checkType(filePath) || !checkType(toPath)) {

                            return;

                   }

 

                   try {

                            info = new ImageInfo(filePath);

                            image = new MagickImage(info);

                            imageDim = image.getDimension();

                            if (width <= 0 || height <= 0) {

                                     height = 120;

                                     width = 120;

                            }

                            scaled = image.scaleImage(width, height);

                            scaled.setFileName(toPath);

                            scaled.writeImage(info);

                   } finally {

                            if (scaled != null) {

                                     scaled.destroyImages();

                            }

                   }

         }

 

         /**

          * 创建图片水印

          *

          * @param filePath

          *            源文件路径 toImg 生成文件位置 logoPath logo路径 pos logo在源图片中的相对位置,以像素点为单位

          * @return

          * @throw MagickException

          * @author  2010-8-11

          */

         public static void createWaterPrintByImg(String filePath, String toImg,

                            String logoPath, Point pos) throws MagickException {

                   if (!checkType(filePath) || !checkType(toImg) || !checkType(logoPath)) {

                            return;

                   }

 

                   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;

                            sImage = fImage.scaleImage(width, height);

 

                            fLogo = new MagickImage(new ImageInfo(logoPath));

                            logoDim = fLogo.getDimension();

                            int lw = logoDim.width;

                            int lh = logoDim.height;

                            sLogo = fLogo.scaleImage(lw, lh);

 

                            // 开始打水印,从左上角开始;如果到右边界则重新开始一行的打印(x=0,y=y+h)

                            int startX = 0;

                            int startY = 0;

                            do {

                                     sImage.compositeImage(CompositeOperator.AtopCompositeOp, sLogo,

                                                        startX, startY);

                                     startX += (logoDim.width + 60);

                                     if (startX >= width) {

                                               startY += logoDim.height * 2;

                                               startX = 0;

                                     }

                            } while (startY <= height);

 

                            sImage.setFileName(toImg);

                            sImage.writeImage(info);

                   } finally {

                            if (fImage != null) {

                                     fImage.destroyImages();

                            }

                            if (sImage != null) {

                                     sImage.destroyImages();

                            }

                            if (fLogo != null) {

                                     fLogo.destroyImages();

                            }

                            if (sLogo != null) {

                                     sLogo.destroyImages();

                            }

                   }

         }

 

         /**

          * 创建文字水印

          *

          * @param filePath

          *            源文件路径 toImg 生成文件位置 text 水印文本 pos logo在源图片中的相对位置,以像素点为单位

          *            pointSize 用于设置点阵大小

          * @return

          * @throw MagickException

          * @author  2010-8-11

          */

         public static void createWaterPrintByText(String filePath, String toImg,

                            String text, Point pos, int pointSize) throws MagickException {

                   if (!checkType(filePath) || !checkType(toImg)) {

                            return;

                   }

 

                   if (null == text || "".equals(text)) {

                            text = "";

                   }

 

                   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 width = imageDim.width;

                   int height = imageDim.height;

 

                   if (width <= (int) pos.getX() || height <= (int) pos.getY()) {

                            pos.setLocation(0, 0);

                   }

 

                   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;// 字符长度

                   MagickImage scaled = aImage.scaleImage(width, height);

                   if (width > tl && height > 5) {

                            DrawInfo aInfo = new DrawInfo(info);

                            aInfo.setFill(PixelPacket.queryColorDatabase("white"));

                            aInfo.setUnderColor(new PixelPacket(65535, 65535, 65535, 65535));// 设置为透明颜色

                            aInfo.setPointsize(pointSize);

                            // 解决中文乱码问题,自己可以去随意定义个自己喜欢字体,我在这用的微软雅黑

                            String fontPath = "C:/WINDOWS/Fonts/MSIMHEI.TTF";

                            // String fontPath = "/usr/maindata/MSYH.TTF";

                            aInfo.setFont(fontPath);

                            aInfo.setTextAntialias(true);

                            aInfo.setOpacity(0);// 透明度

                            aInfo.setText(text);

                            aInfo

                                               .setGeometry("+"

                                                                 + ((int) pos.getX() + "+" + (int) pos.getY()));

                            scaled.annotateImage(aInfo);

                   }

                   scaled.setFileName(toImg);

                   scaled.writeImage(info);

                   scaled.destroyImages();

         }

 

         /**

          * 切取图片

          *

          * @param imgPath

          *            原图路径 toPath 生成文件位置 w 左上位置横坐标 h 左上位置竖坐标 x 右下位置横坐标 y 右下位置竖坐标

          * @return

          * @throw MagickException

          * @author  2010-8-11

          */

         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 src 图片位置

          * @return

          * @throw

          * @author 2010-8-11

          */

         public static boolean removeFile(String src) throws SecurityException {

                   try {

                            if (!checkType(src)) {

                                     return false;

                            }

 

                            File file = new File(src);

                            return file.delete();

                   } catch (Exception e) {

                            e.printStackTrace();

                            return false;

                   }

         }

 

}

 



在windows和Linux上安装ImageMagick与jmagick,Maven配置、Java图片压缩代码(整理网上、结合自己情况、编写出来的新安装方式)相关推荐

  1. Linux安装ImageMagick与JMagick完成过程及配置

    原文地址:http://www.iitshare.com/linux-install-imagemagick-jmagick.html 一.安装背景 最近在服务器上部署了HapiCMS的产品,因为其对 ...

  2. 理解JVM如何使用Windows和Linux上的本机内存

    转至:http://www.chineselinuxuniversity.net/articles/23291.shtml 摘要:Java™ 堆耗尽并不是造成 java.lang.OutOfMemor ...

  3. python linux编程与window编程_Python3如何在Windows和Linux上打包

    1.唠唠叨叨 最近项目中需要Python的打包,看到网上也没有很详细的资料,于是做了一些示例程序.小小的研究了一下,Python如何在Windows和Linux上打包,并把程序源码以及各个记录上传到G ...

  4. 在windows和linux上传或下载文件

    一.使用xshell在windows和linux上传或下载文件 有个很简单的方法就是rz,sz 1.工具安装: 需要安装工具:yum install lrzsz 使用工具:安装的rz,sz就是Linu ...

  5. 理解 JVM 如何使用 Windows 和 Linux 上的本机内存

    http://www.ibm.com/developerworks/cn/java/j-nativememory-linux/ Java 堆(每个 Java 对象在其中分配)是您在编写 Java 应用 ...

  6. 内存详解-理解 JVM 如何使用 Windows 和 Linux 上的本机内存

    内存详解 理解 JVM 如何使用 Windows 和 Linux 上的本机内存 Java™ 堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因.如果本机内存 耗尽,则会 ...

  7. JAVA 内存详解 (理解 JVM 如何使用 Windows 和 Linux 上的本机内存)

    级别: 中级 Andrew Hall , 软件工程师, IBM 2009 年 5 月 11 日 Java™ 堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因.如果本机 ...

  8. qt quick从Windows放到Linux上运行

    刚接触到qt quick,先将Hello World从Windows放到Linux上运行,于是经过了一些坎坷,总结了几点,有不对的请大神指正. 1.将项目文件夹传到Linux上 2.进入项目文件夹(查 ...

  9. 将代码从windows移动linux上出现^M错误的解决方法

    我将代码从windows移动linux上出现了^M的错误,这种错误的本质是因为要个系统对换行符处理不同.windows是\r\n,而linux上是\n. 我的解决方法: 是使用linux系统自带的do ...

  10. Deepin Linux上的Android+Flutter开发环境配置

    Deepin Linux上的Android+Flutter开发环境配置 在Linux上安装Flutter开发环境,官方教程参见Flutter Get Started,中国用户被墙需额外注意的官方教程参 ...

最新文章

  1. 干货 | 谷歌BERT模型fine-tune终极实践教程
  2. android 模糊查询搜索框_彻底搞懂 iOS 和 Android 的设计差异
  3. 《大西洋月刊》:在线能影响中国高等教育吗?
  4. 怎样让你的安卓手机瞬间变Firefox os 畅玩firefox os 应用
  5. Python配置-virtualenv和conda的区别
  6. springtboot 引用子工程的文件_xmake从入门到精通11:如何组织构建大型工程
  7. HR要我薪资流水,可我多报了怎么办?
  8. python 添加图片_python3 tkinter添加图片和文本
  9. 十一、接口(接口的概念,实现,继承,实现)、抽象类与抽象方法(抽象类,抽象方法概念,使用)...
  10. svn server 搭建
  11. 2022年低压电工考试题及在线模拟考试
  12. apple id 如何注册来啦?(亲测流程)
  13. 多源异构数据分析为什么需要数据湖?
  14. QT读写Sqlite数据库的三种方式
  15. Oracle update语句用法
  16. Android应用接入微信开放平台
  17. 王者显示重连服务器失败,最强王者三国手游服务器连接失败 最强王者三国手游曹操学什么技能...
  18. Atitit glb 3tie city lst 三线城市列表 数据目录1. 全球范围内约90个城市 三线 12. 世界性三线城市全球共
  19. CASIA脱机汉字库数据提取工具
  20. 卷积滤波 英文_图形学之卷积滤波器

热门文章

  1. dell服务器uefi启动u盘安装系统,uefi启动u盘安装系统怎么装|uefi u盘启动装系统步骤...
  2. 小步大步算法,循环(Transform,玲珑杯 Round#5 F lonlife 1061)
  3. 6.22 android计算字符高度宽度,红蓝3D图片的制作原理及NDK生成实现
  4. uniapp应用内苹果支付怎么写?
  5. 程序员木讷?我反手就是一串代码把姑娘撩到幸福地流泪
  6. 重庆市企业数据名录爬取采集-信用中国(重庆)
  7. poco mysql 中文_Poco数据库操作用户手册(一)
  8. 四大步骤,彻底关闭Win10自动更新
  9. Python TODO说明
  10. html5和css基础知识