zoukankan      html  css  js  c++  java
  • 转:ImageMagick +Jmagick安装

    原文来自于:

     目录

    一、ImageMagick介绍

    二、安装支持库

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

    四、在Linux上使用yum安装ImageMagick与Jmagick

    五、在windows上安装ImageMagick与Jmagick

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

    作者:赵磊

    博客:http://elf8848.iteye.com

    转载请注明出处:http://elf8848.iteye.com/blog/455675

    一、ImageMagick介绍

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

            ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等操作。对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。ImageMagick 的官网是:http://www.imagemagick.org/script/index.php

           由于我们是java项目,直接使用java通过JNI技术调用ImageMagick的C语言接口是不行的。因为ImageMagick开发时没有使用java JNI生成的头文件。可以使用jmagick解决,jmagick是由c语言开发的,开发时使用了java JNI生成的头文件,所以java可以通过JNI技术调用jmagick。jmagick再调用ImageMagick。这们我们处理图片使用的是jmagick暴露的java接口。

           JMagick不适合在Web应用中使用,请参看:JMagick的JNI-hazard问题 

           也可以使用JNA来调用ImageMagick,JNA全称是Java Native Access,JNA是在JNI的基础上完善的,方便的我们开发的。JNA项目主页是https://github.com/twall/jna 。使用JNA来调用ImageMagick就须要直接操作ImageMagick提供的C接口(API)。

    二、安装支持库

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

    Linux服务器如果没有安装Jpeg v6b、libPng、FreeType库,要在安装imagemagick之前先装好,否则imagemagick没法读取jpeg和png图片,字体文件也读不了.

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

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

    ----libpng-1.2.44.tar.gz  支持PNG  或 libpng-1.4.3.tar.gz版本也可, 目前最新版本是1.5
    ----libjpeg   支持JPEG v1格式(jpegsrc.v6b.tar.gz或jpegsrc.v8b.tar.gz)

    以下可选:

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

    安装jpeg包:

    下载地址:http://www.ijg.org/files/

    http://www.ijg.org/files/jpegsrc.v6b.tar.gz

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

    tar -zvxf jpegsrc.v6b.tar.gz
    cd jpeg-6b/
    ./configure --enable-shared --enable-static ; make ; make install

    如果你选择默认安装,可能很顺利,指定路径后,请先创建以下文件夹
    错误提示:...... /usr/bin/install -c -m 644 jconfig.h /usr/local/jpeg6/include/jconfig.h
    /usr/bin/install: 无法创建一般文件‘/usr/local/jpeg6/include/jconfig.h’: 没有那个文件或目录
    make: *** [install-headers] Error 1
    # mkdir /usr/local/jpeg6
    # mkdir /usr/local/jpeg6/include
    # mkdir /usr/local/jpeg6/lib
    # make install-lib
    # make install

    安装zlib包:

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

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

    是zlib通用压缩库,图形格式png使用zlib中的deflate压缩算法

    tar -xzvf zlib-1.2.5.tar.gz 
    cd zlib-1.2.5
    ./configure
    make
    make install

    安装png包:

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

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

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


    tar -xzvf libpng-1.2.12.tar.gz
    cd libpng-1.2.12
    cp scripts/makefile.std makefile
    make
    make install

    安装freetype

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

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

    ./configure
    make
    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 or directory

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

    安装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了。


    安装ImageMagick
    修改文件执行权限:chmod -R 755 文件名
    tar zvxf ImageMagick-6.4.0-0.tar.gz
    cd ImageMagick-6.4.0-0
    ./configure --prefix=/opt360/ImageMagick-6.4.0 --with-quantum-depth=8   --enable-share

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

    关于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

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

     安装命令:

    make
    make install

    --卸载命令:

    make uninstall

    验证configuration情况:identify -list configure

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



    安装jmagick

    提醒:JMagick不适合在Web应用中使用,请参看:JMagick的JNI-hazard问题  
    修改文件执行权限:chmod -R 755 文件名
    tar zvxf jmagick-6.4.0-src.tar.gz
    cd jmagick-6.4.0-src
    ./configure --prefix=/opt360/jmagick-6.4.0 --with-java-home=/home/jdk/jdk1.6.0_12 -with-magick-home=/opt360/ImageMagick-6.4.0
    make all
    make install

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

    安装成功后,在/opt360/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,在/opt360/jmagick-6.4.0/share/doc目录下就有文档。

    四、在Linux上使用yum安装ImageMagick

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

    安装就检查支持库,一般CentOS系统都带这些库。

    # 查看ImageMagick

    yum list ImageMagick*

    列出:
    ImageMagick.i386                          6.2.8.0-4.el5_1.1                 base
    ImageMagick-c++.i386                      6.2.8.0-4.el5_1.1                 base
    ImageMagick-c++-devel.i386                6.2.8.0-4.el5_1.1                 base
    ImageMagick-devel.i386                    6.2.8.0-4.el5_1.1                 base
    ImageMagick-perl.i386                     6.2.8.0-4.el5_1.1                 base

    # 如果以前安装过,卸载掉ImageMagick:
    yum remove ImageMagick.x86_64
    yum remove ImageMagick-devel.x86_64

    # 安装要用的:
    yum install ImageMagick.i386                          
    yum install ImageMagick-devel.i386   

    # 检查是否成功安装:
    rpm -qa | grep -i 'ImageMagick'
    # 输出:
    ImageMagick-devel-6.2.8.0-3.el5.4
    ImageMagick-6.2.8.0-3.el5.4

    yum list installed | grep ImageMagick*
    # 输出:
    ImageMagick.x86_64                       6.2.8.0-3.el5.4        installed       
    ImageMagick-devel.x86_64                 6.2.8.0-3.el5.4        installed

    五、在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包处理图片。

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

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

    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、Exception in thread "main" java.lang.UnsatisfiedLinkError: C:WINDOWSsystem32jmagick.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。加载新的环境变量。

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

    转载请注明出处:http://elf8848.iteye.com/blog/455675

  • 相关阅读:
    判断一张view 是否被加载过用 nil == view.superview
    oracle9i新增sql命令merge
    Windows平台个人常用软件推荐
    ASPxSpinEdit高度无法控件的解决办法
    Oracle编码约定
    宾克斯的酒 
    “dcom项目无属性”的解决方法
    安装VS2005后找不到工具箱的解决办法
    奇怪问题一个
    Oracle临时表空间不够,导致查询出错。
  • 原文地址:https://www.cnblogs.com/guoyongrong/p/4225613.html
Copyright © 2011-2022 走看看