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

简介: 安装过程(如图所示)  若想使用imagemagick,需要安装各种依赖库、一步小心,可能就会安装错误。其中ImageMagick的访问地址为: http://www.imagemagick.org/script/index.php2、安装支持库Linux服务器如果没有安装Jpeg v6b、libPng、FreeType库,要在安装imagemagick之前先装好,否则imagemagi
  1. 安装过程(如图所示) 

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

2、安装支持库

Linux服务器如果没有安装Jpeg v6blibPngFreeType库,要在安装imagemagick之前先装好,否则imagemagick没法读取jpegpng图片,字体文件也读不了.(本次安装以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上用源码编译安装ImageMagickjmagick

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

下载ImageMagickJMagick
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-bit15%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检查支持的文件类型。检查列表中是否有JPGPNG格式的。若没有这两个文件,说明是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应用中使用,请参看:JMagickJNI-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
因没有Junitjar包报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编译出来的,所以不能在jdk1.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包中的jmagickjar包也改成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上安装ImageMagickjmagick

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

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

有动态版(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>

 

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

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

1System.out.println(System.getProperty("java.library.path")). 
直接用System.out.println(System.getProperty("java.library.path")). 
打印出当前环境的路径,然后再把jmagick.dlljmagick.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

 

6Exceptionin 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;

                   }

         }

 

}

 


目录
相关文章
|
15天前
|
安全 Ubuntu Java
Linux配置使用篇
Linux配置使用篇
|
25天前
|
Java Linux Maven
Linux中安装MAVEN环境配置
Linux中安装MAVEN环境配置
58 3
|
14天前
|
网络协议 Linux
在Linux中,管理和配置网络接口
在Linux中管理网络接口涉及多个命令,如`ifconfig`(在新版本中被`ip`取代)、`ip`(用于网络设备配置)、`nmcli`(NetworkManager的CLI工具)、`nmtui`(文本界面配置)、`route/ip route`(处理路由表)、`netstat/ss`(显示网络状态)和`hostnamectl/systemctl`(主机名和服务管理)。这些命令帮助用户启动接口、设置IP地址、查看连接和路由信息。不同发行版可能有差异,建议参考相应文档。
19 4
|
1天前
|
Ubuntu 网络协议 Linux
Linux(20) Ubuntu 20.04 网络接口自动切换路由配置
Linux(20) Ubuntu 20.04 网络接口自动切换路由配置
9 0
|
1天前
|
Linux
Linux(9)Debain EC25 quectel-CM usbnet0开机自动联网配置
Linux(9)Debain EC25 quectel-CM usbnet0开机自动联网配置
4 0
|
3天前
|
JavaScript Java 测试技术
基于Java的网上食品店的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网上食品店的设计与实现(源码+lw+部署文档+讲解等)
18 0
|
4天前
|
Linux 网络安全 开发工具
【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透
【GitLab私有仓库】在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透
|
4天前
|
缓存 安全 Ubuntu
Linux配置代理上网
如何配置Linux代理
10 1
|
8天前
|
JavaScript Java 测试技术
基于Java的网上花店系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网上花店系统的设计与实现(源码+lw+部署文档+讲解等)
18 0
|
8天前
|
JavaScript Java 测试技术
基于Java的网上书城的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网上书城的设计与实现(源码+lw+部署文档+讲解等)
22 0