下载 & 解压 • 配置 • 构建 • 安装 • Linux 特定构建说明 • Mac OS X 特定构建说明 • MinGW 特定构建说明 • 处理意外问题
你可能不想在 Linux 或类 Linux 系统下进行高级安装。如果是这样,你也可以选择安装预编译的 二进制发行版,或者如果你仍然想从源代码安装,而不需要进行所有操作,请查看简单的 从源代码安装 说明。但是,如果你想自定义 ImageMagick 在 Linux 或类 Linux 系统上的配置和安装,让我们开始吧。
下载 & 解压
ImageMagick 在各种 Linux 和类 Linux 操作系统上构建,包括 Linux、Solaris、FreeBSD、Mac OS X 等。需要编译器,幸运的是,几乎所有现代 Linux 系统都配备了编译器。从 imagemagick.org 或 镜像 下载 ImageMagick.tar.gz,并根据其 消息摘要 验证发行版。
使用以下命令解压发行版
tar xvzf ImageMagick.tar.gz
现在你已经解压了 ImageMagick Linux/Linux 源代码发行版,让我们配置它。
配置
配置脚本会查看你的环境,并决定它可以组合什么来让 ImageMagick 在你的系统上编译和安装。这包括找到编译器、编译器头文件的位置(例如 stdlib.h),以及 ImageMagick 是否可以使用任何代理库(例如 JPEG、PNG、TIFF 等)。如果你愿意接受配置的默认选项,并在源代码目录中构建,你只需键入
$ cd ImageMagick-7.1.1-38
$ ./configure
查看配置脚本输出,以验证它是否找到了你认为应该找到的所有东西。特别注意脚本输出的最后几行。例如,以下是我们系统最近的一份报告
ImageMagick is configured as follows. Please verify that this configuration matches your expectations. Host system type: x86_64-unknown-linux-gnu Build system type: x86_64-unknown-linux-gnu Option Value ------------------------------------------------------------------------------- Shared libraries --enable-shared=yes yes Static libraries --enable-static=yes yes Module support --with-modules=yes yes GNU ld --with-gnu-ld=yes yes Quantum depth --with-quantum-depth=16 16 High Dynamic Range Imagery --enable-hdri=no no Delegate Configuration: BZLIB --with-bzlib=yes yes Autotrace --with-autotrace=yes yes DJVU --with-djvu=yes no DPS --with-dps=yes no FlashPIX --with-fpx=yes no FontConfig --with-fontconfig=yes yes FreeType --with-freetype=yes yes GhostPCL None pcl6 (unknown) GhostXPS None gxps (unknown) Ghostscript None gs (8.63) result_ghostscript_font_dir='none' Ghostscript fonts --with-gs-font-dir=default Ghostscript lib --with-gslib=yes no (failed tests) Graphviz --with-gvc=yes yes JBIG --with-jbig= no JPEG v1 --with-jpeg=yes yes JPEG-2000 --with-jp2=yes yes LCMS --with-lcms=yes yes LQR --with-lqr=yes no Magick++ --with-magick-plus-plus=yes yes OpenEXR --with-openexr=yes yes PERL --with-perl=yes /usr/bin/perl PNG --with-png=yes yes RSVG --with-rsvg=yes yes TIFF --with-tiff=yes yes result_windows_font_dir='none' Windows fonts --with-windows-font-dir= WMF --with-wmf=yes yes X11 --with-x= yes XML --with-xml=yes yes ZLIB --with-zlib=yes yes X11 Configuration: X_CFLAGS = X_PRE_LIBS = -lSM -lICE X_LIBS = X_EXTRA_LIBS = Options used to compile and link: PREFIX = /usr/local EXEC-PREFIX = /usr/local VERSION = 6.4.8 CC = gcc -std=gnu99 CFLAGS = -fopenmp -g -O2 -Wall -W -pthread MAGICK_CFLAGS = -fopenmp -g -O2 -Wall -W -pthread CPPFLAGS = -I/usr/local/include/ImageMagick PCFLAGS = -fopenmp DEFS = -DHAVE_CONFIG_H LDFLAGS = -lfreetype MAGICK_LDFLAGS = -L/usr/local/lib -lfreetype LIBS = -lMagickCore-Q16 -llcms -ltiff -lfreetype -ljpeg -lfontconfig -lXext -lSM -lICE -lX11 -lXt -lbz2 -lz -lm -lgomp -lpthread -lltdl CXX = g++ CXXFLAGS = -g -O2 -Wall -W -pthread
你可以通过在配置命令行中设置变量的初始值,来影响配置脚本对编译器、编译标志或库的选择。这些包括,但不限于
- CC
- 要使用的 C 编译器名称(例如 cc -Xa)。
- CXX
- 要使用的 C++ 编译器名称(例如 CC)。
- CFLAGS
- 编译 C 代码的编译器标志(例如 -g -O2)。
- CXXFLAGS
- 编译 C++ 代码的编译器标志(例如 -g -O2)。
- CPPFLAGS
- 查找头文件的包含路径(例如 -I/usr/local)。
- LDFLAGS
- 查找库的库路径(例如 -L/usr/local)。支持库运行路径概念的系统可能需要额外的参数才能在运行时找到共享库。例如,Solaris 链接器需要一个形式为 -R/path 的参数。一些 Linux 系统可以使用 -rpath /usr/local/lib,而其他一些 Linux 系统的 gcc 不会将 -rpath 传递给链接器,需要一个形式为 -Wl,-rpath,/usr/local/lib 的参数。
- LIBS
- 链接所需的额外库(例如 -l/usr/local/lib)。
以下是如何从命令行设置配置变量的示例
configure CC=c99 CFLAGS=-O2 LDFLAGS='-L/usr/local/lib -R/usr/local/lib' LIBS=-lposix
任何需要目录路径的变量(例如 CPPFLAGS 或 LDFLAGS)都必须指定绝对路径,而不是相对路径。
配置通常可以自动找到 X 包含文件和库文件,但如果找不到,可以使用 --x-includes=path 和 --x-libraries=path 选项指定它们的位置。
配置脚本提供了一些 ImageMagick 特定的选项。当禁用选项 --disable-something 等效于指定 --enable-something=no,而 --without-something 等效于 --with-something=no。配置选项如下(执行 configure --help 以查看所有选项)。
ImageMagick 选项表示要启用、禁用或包含在构建中的功能或包。当启用功能(通过 --enable-something)时,它会启用 ImageMagick 中已存在的代码。当启用包(通过 --with-something)时,配置脚本将搜索它,如果它已正确安装并可以使用(编译器找到了头文件和已构建的库),它将被包含在构建中。配置脚本默认情况下禁用所有功能并启用所有包。通常,禁用包的唯一原因是,如果包存在,但它不适合构建(可能是旧版本或没有使用正确的编译标志编译)。
以下是可以配置的可选功能
--enable-shared | 构建共享库以及对加载编码器和处理模块的支持。共享库是首选,因为它们允许程序共享公共代码,使各个程序更小。此外,共享库是 PerlMagick 要由安装的 PERL 动态加载所需的(否则需要安装额外的 PERL(PerlMagick))。 使用代理构建的 ImageMagick(参见下面的 MAGICK PLUG-INS)可能会带来额外的挑战。如果 ImageMagick 使用静态库构建(默认情况下不使用 --enable-shared),那么代理库可以构建为静态库或共享库。但是,如果 ImageMagick 使用共享库构建,那么所有代理库也必须构建为共享库。静态库通常具有扩展名 .a,而共享库通常具有扩展名如 .so、.sa 或 .dll。共享库中的代码通常必须使用特殊的编译器选项进行编译,以生成位置无关代码 (PIC)。只有在平台默认情况下将代码编译为 PIC 时,才不需要这样做。 PIC 编译标志因供应商而异(gcc 的是 -fPIC)。但是,必须使用相同的标志编译所有共享库源代码(对于 gcc,使用 -fPIC 而不是 -fpic)。虽然静态库通常使用诸如 ar 之类的归档工具创建,但共享库使用特殊的链接器或编译器选项构建(例如,gcc 的 -shared)。 如果没有指定 --enable-shared,那么将构建一个新的 PERL 解释器(PerlMagick),它与 PerlMagick 扩展静态链接。这个新的解释器将安装到与 ImageMagick 实用程序相同的目录中。如果指定了 --enable-shared,则 PerlMagick 扩展将构建为动态加载对象,该对象在运行时加载到当前的 PERL 解释器中。动态加载扩展的使用优于静态链接扩展,因此如果可能,请使用 --enable-shared(注意,与 ImageMagick 一起使用的所有库都必须是共享库!)。 |
--disable-static | 不会构建静态存档库(扩展名为 .a)。如果你正在构建共享库,那么构建静态库意义不大。构建静态库的原因包括:1)它们更容易调试;2)客户端没有外部依赖项(即 libMagick.so);3)构建代理库的 PIC 版本可能需要额外的专业知识和努力;4)你无法构建共享库。 |
--disable-installed | 禁用构建已安装的 ImageMagick(默认情况下启用)。 默认情况下,ImageMagick 构建配置为正式安装到目录树中。这是安装 ImageMagick 最安全、最可靠的方式。使用此选项配置 ImageMagick,使其不使用硬编码路径,并通过计算从可执行文件(或从 MAGICK_HOME 环境变量指定的位置)的偏移路径来定位支持文件。未安装的配置非常适合预期在任何位置解压缩和运行的二进制发行版。 |
--enable-ccmalloc | 启用 'ccmalloc' 内存调试支持(默认情况下禁用)。 |
--enable-prof | 启用 'prof' 性能分析支持(默认情况下禁用)。 |
--enable-gprof | 启用 'gprof' 性能分析支持(默认情况下禁用)。 |
--enable-gcov | 启用 'gcov' 性能分析支持(默认情况下禁用)。 |
--disable-openmp | 禁用 OpenMP(默认情况下启用)。 某些 ImageMagick 算法,例如卷积,在现代双核和四核处理器上运行时,可以借助 OpenMP API 显著提高速度。 |
--disable-largefile | 禁用对大型(64 位)文件偏移量的支持。 默认情况下,如果操作系统支持大型文件,ImageMagick 将使用对大型文件(在 32 位 CPU 上大于 2GB)的支持进行编译。使用 ImageMagick 库的一些应用程序可能还需要对大型文件提供支持。通过 --disable-largefile 禁用对大型文件的支持,依赖的应用程序不需要使用库时为大型文件使用特殊的编译选项。 |
以下是可以配置的可选包
--with-quantum-depth | 像素量子中的位数(默认值为 16)。 使用此选项指定每个像素量子要使用的位数(红色、绿色、蓝色和 alpha 像素分量的尺寸)。例如,--with-quantum-depth=8 使用 8 位量子构建 ImageMagick。大多数计算机显示适配器使用 8 位量子。目前支持的参数为 8、16 或 32。我们建议使用默认值 16,因为某些图像格式支持每像素 16 位。但是,此选项对于确定 ImageMagick 的整体运行时性能非常重要。 量子中的位数决定了它可以包含多少个值。每个量子级别支持的值是前一个级别的 256 倍。下表显示了各种量子大小的可用范围。 Quantum Depth Valid Range (Decimal) Valid Range (Hex) 8 0-255 00-FF 16 0-65535 0000-FFFF 32 0-4294967295 00000000-FFFFFFFF 较大的像素量子会导致 ImageMagick 运行速度变慢,并需要更多内存。例如,使用 16 位像素量子会导致 ImageMagick 运行速度比使用 8 位像素量子构建时慢 15% 到 50%(并且占用两倍的内存)。 图像消耗的虚拟内存量可以通过公式 (5 * Quantum Depth * Rows * Columns) / 8 计算得出。当资源有限时,这是一个重要的考虑因素,特别是由于处理图像可能需要同时在内存中保留多个图像。下表显示了 1024x768 图像的内存消耗值 Quantum Depth Virtual Memory 8 3MB 16 8MB 32 15MB |
--enable-hdri | 准确地表示各种强度级别。 |
--enable-osx-universal-binary | 在 OS X 上构建通用二进制文件。 |
--without-modules | 禁用对动态加载模块的支持。 图像编码器和处理模块构建为可加载模块,这些模块安装在目录 [prefix]/lib/ImageMagick-X.X.X/modules-QN(其中 'N' 等于 8、16 或 32,具体取决于量子深度)的 coders 和 filters 子目录中。模块构建选项仅在与 --enable-shared 结合使用时可用。如果没有指定 --enable-shared,则禁用构建模块的支持。注意,如果指定了 --enable-shared 和 --disable-modules,则模块加载器处于活动状态(允许通过简单地将模块复制到位置来扩展已安装的 ImageMagick),但 ImageMagick 本身不是使用模块构建的。 |
--with-cache | 设置像素缓存阈值(默认为可用内存)。 使用此选项指定不同的图像像素缓存阈值。这将设置 ImageMagick 在切换到使用内存映射临时文件来存储原始像素数据之前允许消耗的最大堆内存量。 |
--without-threads | 禁用线程支持。 默认情况下,ImageMagick 库使用多线程支持进行编译。如果这不可取,请指定 --without-threads。 |
--with-frozenpaths | 启用冻结的代理路径。 通常,外部程序名称将替换到 delegates.xml 配置文件中,而没有完整路径。指定此选项以启用使用配置确定的位置保存程序的完整路径。这对于程序存储在多个路径下的环境,以及用户可能使用与构建 ImageMagick 的人不同的 PATH 设置的环境很有用。 |
--without-magick-plus-plus | 禁用构建/安装 Magick++。 禁用构建Magick++,这是ImageMagick的C++应用程序编程接口。构建Magick++需要合适的C++编译器。指定CXX配置变量以选择要使用的C++编译器(默认值为g++),并指定CXXFLAGS以选择所需的编译器优化和调试标志(默认值为-g -O2)。过时的C++编译器通常会被配置测试拒绝,因此只有在Magick++无法编译时才需要指定此选项。 |
--without-perl | 禁用构建/安装PerlMagick,或者 默认情况下,PerlMagick在ImageMagick的正常configure、make、sudo make install流程中方便地编译和安装。当指定--without-perl时,您必须先安装ImageMagick,下载PerlMagick源代码发行版,构建,最后安装PerlMagick。请注意,即使指定了--without-perl,PerlMagick也会被配置。如果提供了参数--with-perl=/path/to/perl,则/../path/to/perl将被视为要使用的PERL解释器。如果PATH中的perl可执行文件不是PERL5,或者不是您要使用的PERL,这很重要。 |
--with-perl=PERL | 使用指定的Perl二进制文件来配置PerlMagick。 |
--with-perl-options=OPTIONS | 在从Makefile.PL生成PerlMagick的Makefile时,要在命令行上传递的选项。 PerlMagick模块通常使用Perl解释器的安装PREFIX进行安装,而不是ImageMagick的安装PREFIX。如果ImageMagick的安装前缀与PERL的PREFIX不同,您可能会发现PerlMagick的sudo make install步骤尝试安装到您没有写入权限的目录树中。当PERL与操作系统一起提供或在互联网服务提供商(ISP)Web服务器上时,这很常见。如果您希望PerlMagick安装在其他位置,请通过“--with-perl-options=PREFIX=/some/place”向PERL的配置步骤提供PREFIX选项。MakeMaker接受的其他选项包括“LIB”、“LIBPERL_A”、“LINKTYPE”和“OPTIMIZE”。有关配置PERL扩展的更多信息,请参阅ExtUtils::MakeMaker(3)手册页。 |
--without-bzlib | 禁用BZLIB支持。 |
--without-dps | 禁用显示Postscript支持。 |
--with-fpx | 启用FlashPIX支持。 |
--without-freetype | 禁用TrueType支持。 |
--with-gslib | 启用Ghostscript库支持。 |
--without-jbig | 禁用JBIG支持。 |
--without-jpeg | 禁用JPEG支持。 |
--without-jp2 | 禁用JPEG v2支持。 |
--without-lcms | 禁用LCMS支持。 |
--without-lzma | 禁用LZMA支持。 |
--without-png | 禁用PNG支持。 |
--without-tiff | 禁用TIFF支持。 |
--without-wmf | 禁用WMF支持。 |
--with-fontpath | 附加到默认字体搜索路径。 |
--with-gs-font-dir | 包含Ghostscript字体的目录。 指定包含Ghostscript Postscript Type 1字体文件(例如n022003l.pfb)的目录,以便可以使用FreeType库渲染这些文件。如果使用默认的Ghostscript安装路径(${prefix}/share/ghostscript/fonts)安装字体文件,则配置应该会自动发现它们,因此无需指定此选项。如果Ghostscript字体无法自动找到,或者需要覆盖位置,请指定此选项。 |
--with-windows-font-dir | 包含MS-Windows字体的目录。 指定包含与MS-Windows兼容的字体的目录。当ImageMagick在MS-Windows下运行时,这并非必需。 |
--without-xml | 禁用XML支持。 |
--without-zlib | 禁用ZLIB支持。 |
--without-x | 不要使用X Window系统。 默认情况下,ImageMagick会使用X11委托库(如果可用)。当指定--without-x时,将禁用X11的使用。display、animate和import子命令将不被包含。其余子命令的功能会降低,例如无法访问X11字体(考虑改用Postscript或TrueType字体)。 |
--with-share-path=DIR | 共享目录的备用路径(默认值为share/ImageMagick)。 |
--with-libstdc=DIR | 在DIR中使用libstdc++(用于GNU C++)。 |
虽然configure旨在简化ImageMagick的安装,但它通常会发现一些问题,这些问题在编译ImageMagick时可能会在以后遇到。配置脚本通过使用指定的编译标志(CFLAGS)、预处理器标志(CPPFLAGS)和链接器标志(LDFLAGS)执行编译器(CC)来测试头文件和库。所有错误都会记录到文件config.log中。如果配置无法发现头文件或库,请查看此日志文件以确定原因,但是请注意,*config.log中的错误是正常的*,因为配置的工作原理是尝试一些操作,然后查看是否失败。只有当测试应该在您的系统上通过时,config.log中的错误才是一个问题。
配置失败的常见原因是:1)委托头文件不在头文件包含路径中(CPPFLAGS -I选项);2)委托库不在链接器搜索/运行路径中(LDFLAGS -L/-R选项);3)委托库缺少函数(旧版本?);或4)编译环境存在故障。
如果尝试了所有合理的纠正措施,问题似乎是配置脚本中的缺陷,请向ImageMagick缺陷支持论坛发送错误报告。所有错误报告都应包含操作系统类型(由uname -a报告)和编译器/编译器版本。配置脚本输出的副本和/或config.log文件的相关部分可能有助于找到问题。如果您发布了config.log的部分内容,请也发送配置输出的脚本和对您期望看到的内容(以及原因)的描述,以便可以识别和解决您观察到的故障。
ImageMagick现在已配置并准备构建
构建
配置完ImageMagick后,从生成的make文件中可以使用以下标准构建目标
- make
- 构建ImageMagick。
- sudo make install
- 安装ImageMagick。
- make check
- 使用已安装的ImageMagick运行测试(必须先完成sudo make install)。Ghostscript和Freetype是先决条件,否则某些渲染文本以及EPS、PS和PDF格式的单元测试可能会失败。这些单元测试需要开放安全策略才能通过。
- make clean
- 删除构建目录中由make创建的所有内容。
- make distclean
- 删除构建目录中由configure和make创建的所有内容。如果您想从头开始,这将很有用。
- make uninstall
- 删除系统中所有由sudo make install使用当前配置安装(或将要安装)的文件。请注意,此目标对于PerlMagick并不完美,因为Perl不再支持uninstall目标。
在大多数情况下,您只需要使用以下命令编译ImageMagick
make
构建完成后,您可以选择在系统上安装ImageMagick,如下所述。
安装
现在ImageMagick已配置并构建,键入
make install
以安装它。
默认情况下,ImageMagick将二进制文件安装到/../usr/local/bin,库安装到/../usr/local/lib,头文件安装到/../usr/local/include,文档安装到/../usr/local/share。您可以通过向configure提供选项--prefix=PATH来指定/../usr/local以外的备用安装前缀。如果您没有权限在默认路径下安装,或者您想安装到系统目录中,这将非常有用。
要确认您的ImageMagick发行版安装成功,请确保安装目录在您的可执行文件搜索路径中,然后键入
magick logo: logo.gif identify logo.gif
ImageMagick徽标将显示在您的X11显示器上。
要验证ImageMagick构建配置,请键入
magick identify -list configure
要列出支持的图像格式,请键入
magick identify -list format
为了进行更全面的测试,您可以通过键入以下命令来运行ImageMagick测试套件
make check
Ghostscript是先决条件,否则EPS、PS和PDF测试将失败。请注意,由于开发人员环境与您的环境之间存在差异,即使结果正常,也可能有一些测试失败。开发人员环境与您自己的环境之间的差异可能包括编译器、CPU类型和使用的库版本。ImageMagick开发人员使用所有依赖库的当前版本。
Linux特定构建说明
从imagemagick.org或其镜像下载ImageMagick.src.rpm,并根据其消息摘要验证发行版。
使用以下命令构建ImageMagick
rpmbuild --rebuild ImageMagick.src.rpm
构建完成后,找到RPMS文件夹并安装ImageMagick二进制RPM发行版
$ rpm -ivh ImageMagick-7.1.1-?.*.rpm
Mac OS X特定构建说明
以管理员身份或使用以下命令执行这些步骤sudo命令
安装MacPorts。下载并安装MacPorts,然后键入以下命令
sudo port -v install freetype +bytecode sudo port -v install librsvg sudo port -v install graphviz +gs +wmf +jbig +jpeg2 +lcms
这将安装ImageMagick将使用的许多委托库,例如JPEG和FreeType。
安装来自Apple的最新Xcode。
使用以下命令port命令安装您需要的任何委托库,例如
sudo port install jpeg
现在让我们构建ImageMagick
下载ImageMagick源代码发行版,并根据其消息摘要验证发行版。
解压缩并更改到ImageMagick的顶层目录
$ tar xvzf ImageMagick-7.1.1-38.tar.gz
$ cd ImageMagick-7.1.1-38
配置ImageMagick
./configure --prefix=/opt --with-quantum-depth=16 \ --disable-dependency-tracking --with-x=yes \ --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib/ \ --without-perl"
构建ImageMagick
make
安装ImageMagick
sudo make install
要验证您的安装,请键入
/opt/local/bin/identify -list font
以列出ImageMagick已知的字体。
要在新 shell 中测试ImageMagick GUI,请键入
display -display :0
MinGW特定构建说明
虽然您可以自己下载并安装委托库,但许多库已在GnuWin32发行版中提供。下载并安装您需要的任何委托库,例如JPEG、PNG、TIFF等。确保在安装软件包时指定开发头文件。接下来键入:
$ tar jxvf ImageMagick-7.1.1-?.tar.bz2
$ cd ImageMagick-7.1.1-38
$ export CPPFLAGS="-Ic:/Progra~1/GnuWin32/include"
$ export LDFLAGS="-Lc:/Progra~1/GnuWin32/lib"
$ ./configure --without-perl
$ make
$ sudo make install
处理意外问题
ImageMagick的下载、配置、构建和安装很可能像预期的那样顺利进行,但是某些系统和环境可能会导致一个或多个步骤失败。我们将讨论我们遇到的几个问题以及如何采取纠正措施以确保您拥有可用的ImageMagick版本
构建问题
如果构建抱怨缺少依赖项(例如.deps/source.PLO),请在您的configure命令行中添加--disable-dependency-tracking。
某些系统可能在构建时由于未解析的符号而无法链接。尝试将LDFLAGS添加到configure命令行
configure LDFLAGS='-L/usr/local/lib -R/usr/local/lib'
动态链接器运行时绑定
在某些系统上,ImageMagick可能无法找到其共享库libMagick.so。尝试使用库路径运行ldconfig
/sbin/ldconfig /usr/local/lib
Solaris和Linux系统具有ldd命令,这对于跟踪ImageMagick依赖的库很有用
ldd `which convert`
委托库
有时您可能会收到以下警告
no decode delegate for this image format no encode delegate for this image format
此异常表示在构建ImageMagick时,外部委托库或其头文件不可用。要添加对图像格式的支持,请下载并安装所需的委托库及其头文件,然后重新配置、重新构建和重新安装ImageMagick。例如,让我们添加对JPEG图像格式的支持。首先,我们安装JPEG RPM
yum install libjpeg libjpeg-devel
现在重新配置、重新构建和重新安装ImageMagick。要验证JPEG现在是否已正确支持在ImageMagick中,请使用以下命令
magick identify -list format
您应该看到与JPEG标签关联的rw-模式。此模式意味着图像可以读取或写入,并且每个图像文件只能支持一个图像。
PerlMagick
如果PerlMagick无法链接,并显示类似于libperl.a is not found的消息,请使用--enable-shared或--enable-shared --with-modules选项重新运行configure。