如何在Windows服务器上的IIS服务器上安装ImageMagick PHP扩展。

3
我有一个Windows Web Server 2012R2,希望在上面安装Imagemagick PHP扩展,但是我已经尝试过的所有方法 失败了,无法在phpinfo()中显示它。
我该如何让Imagemagick运行? 我找不到适用于IIS的工作安装步骤。
2个回答

6
最终我找到了一篇博客文章,这是PhilipD已删除帖子的转载,由于格式错误且未得到更正,所以该问题被删除了。
我在此重新发布PhilipD的答案,以便那些遇到同样问题的人更容易找到博客文章。这些步骤详细介绍了32位安装。我进行了64位安装,适用于我的64位php。

这是在Windows Server 2012R2 (64位)服务器上,使用IIS作为Web服务器应用程序。然而,我安装了所有与ImageMagick相关的软件的32位版本,因为Web服务器应用程序(IIS)是32位的。以下显示的是截至2017年10月最新的版本。

1. 下载ImageMagick安装程序

2. 下载ImageMagick的php模块

3. 下载PHP所需的依赖包以加载/使用ImageMagick

4. 解除下载的每个文件的阻止

这取决于你是如何下载的,但如果需要,你应该始终检查并“解除阻止”下载的文件。

  • 右键单击每个文件,并从弹出菜单中选择“属性”
  • 如果属性对话框显示文本“此文件来自另一台计算机,可能会被阻止以帮助保护此计算机”
    • 点击“解除阻止”按钮
    • 点击“确定”。

如果你不“解除阻止”下载的文件,特别是ZIP文件,安装或复制的各个文件仍可能被标记为“已阻止”,这有时会在运行软件时引起一些奇怪的问题。

5. 安装Imagick应用程序

  • 运行ImageMagick-7.0.7-8-Q16-x86-dll.exe进行安装
  • 接受许可协议
  • 在安装过程的每个屏幕上接受默认值。

安装完成后,为了测试是否成功,打开命令提示符并运行以下两个命令:

magick wizard: wizard.jpg
magick wizard.jpg win:

这应该显示一个“IMDisplay”窗口,显示一个在画架前创作蒙娜丽莎肖像的巫师的草图/图像。

6. 安装依赖项

  • 解压步骤3中下载的文件。
  • 进入bin目录
  • IM_MOD_RL_*.dll文件(125个文件)复制到安装的ImageMagick版本的文件夹中,例如C:\Program Files (x86)\ImageMagick-7.0.7-Q16
  • 返回bin目录
  • CORE_RL_*.dll文件(20个文件)复制到安装的ImageMagick版本的文件夹中,例如C:\Program Files (x86)\ImageMagick-7.0.7-Q16 * * 如果您想要覆盖/重命名,请选择覆盖
    • 注意,这将破坏Imagick的命令版本。magick: Wrong JPEG library version: library is 80, caller expects 62

7. 安装Imagick php扩展dll

  • 解压步骤2中下载的文件。
  • 将文件php_imagick.dll复制到服务器上已安装的PHP版本的"ext"文件夹中,例如C:\php\7.1\ext

不要复制CORE_RL_*文件
在网上的一些文章中,您会看到有关复制此套件中的CORE_RL_*文件以替换ImageMagick文件夹中的文件的说明,但这是不正确的;这些文件的适当版本已在步骤6中复制。

8. 修改PHP.ini

  • Edit the php.ini file in the PHP software folder, such as “C:\PHP\7.1\php.ini”
  • Add the following line to the section containing the other extensions:

       extension=php_imagick.dll
    

9. 重新启动服务器。

重新启动IIS似乎不足以解决问题,您需要重新启动整个计算机。这可能与IIS无法识别Imagick输入的PATH条目有关。

10. 测试PHPINFO

  • 在Web根目录中创建一个包含以下内容的PHP文件:

  • 在Web浏览器中访问此文件,

  • 搜索PHPINFO输出中现在应该存在的“Imagick”部分。

它应该看起来像下面这样:

imagick imagick 模块: 已启用 imagick 模块版本 3.4.3
imagick 类 Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
Imagick 编译使用的 ImageMagick 版本 ImageMagick 6.9.3-7 Q16 x86 2016-03-27 http://www.imagemagick.org
Imagick 使用的 ImageMagick 库版本 ImageMagick 6.9.3-7 Q16 x86 2016-03-27 http://www.imagemagick.org
ImageMagick 版权所有 (C) 1999-2015 ImageMagick Studio LLC
ImageMagick 发布日期 2016-03-27
ImageMagick 支持的格式数量: 216
ImageMagick 支持的格式 3FR, AAI, AI, ART, ARW, AVI, AVS, BGR, BGRA, BGRO, BIE, BMP, BMP2, BMP3, BRF, CAL, CALS, CANVAS, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CR2, CRW, CUR, CUT, DATA, DCM, DCR, DCX, DDS, DFONT, DJVU, DNG, DOT, DPS, DPX, DXT1, DXT5, EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, EXR, FAX, FITS, FPX, FRACTAL, FTS, G3, GIF, GIF87, GRADIENT, GRAY, GROUP4, GV, H, HALD, HDR, HISTOGRAM, HRZ, HTM, HTML, ICB, ICO, ICON, IIQ, INFO, INLINE, IPL, ISOBRL, ISOBRL6, J2C, J2K, JBG, JBIG, JNX, JP2, JPC, JPM, JPT, JSON, K25, KDC, LABEL, M2V, M4V, MAC, MAGICK, MAP, MASK, MAT, MATTE, MEF, MIFF, MKV, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MTV, MVG, NEF, NRW, NULL, ORF, OTB, OTF, PAL, PALM, PAM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PICON, PICT, PIX, PLASMA, PNM, PPM, PREVIEW, PS, PS2, PS3, PSB, PSD, PTIF, PWP, RADIAL-GRADIENT, RAF, RAS, RAW, RGB, RGBA, RGBO, RGF, RLA, RLE, RMF, RW2, SCR, SCREENSHOT, SCT, SFW, SGI, SHTML, SIX, SIXEL, SPARSE-COLOR, SR2, SRF, STEGANO, SUN, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TTC, TTF, TXT, UBRL, UBRL6, UIL, UYVY, VDA, VICAR, VID, VIFF, VIPS, VST, WBMP, WEBP, WMF, WMV, WPG, X3F, XBM, XC, XCF, XPM, XPS, XV, YCbCr, YCbCrA, YUV

重要提示:
如果“支持的格式”部分没有显示任何格式,或者只显示了少量格式,则最可能的原因是您错过了将一个或多个IM_MOD_RL_*或CORE_RL_* DLL文件复制到ImageMagick文件夹中,或者您从“php_magick”工具包中复制了它们。

11. 使用PHP中的ImageMagick生成测试图像

在Web根目录中创建一个PHP文件,其中包含以下内容(我从此项验证ImageMagick安装中的一个条目中复制了这些内容):

<?php
error_reporting(E_ALL); 
ini_set( 'display_errors','1');
/* Create a new imagick object */
$im = new Imagick();
/* Create new image. This will be used as fill pattern */
$im->newPseudoImage(50, 50, "gradient:red-black");
/* Create imagickdraw object */
$draw = new ImagickDraw();
/* Start a new pattern called "gradient" */
$draw->pushPattern('gradient', 0, 0, 50, 50);
/* Composite the gradient on the pattern */
$draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);
/* Close the pattern */
$draw->popPattern();
/* Use the pattern called "gradient" as the fill */
$draw->setFillPatternURL('#gradient');
/* Set font size to 52 */
$draw->setFontSize(52);
/* Annotate some text */
$draw->annotation(20, 50, "Hello World!");
/* Create a new canvas object and a white image */
$canvas = new Imagick();
$canvas->newImage(350, 70, "white");
/* Draw the ImagickDraw on to the canvas */
$canvas->drawImage($draw);
/* 1px black border around the image */
$canvas->borderImage('black', 1, 1);
/* Set the format to PNG */
$canvas->setImageFormat('png');
/* Output the image */
header("Content-Type: image/png");
echo $canvas;
?>

在浏览器中运行此PHP文件。它应该显示一个包含文本“Hello World!”的图像。

Hello world with freehand circle and arrows pointing to it

12. 检查错误

检查php-errors.log文件是否有任何错误。
您可以在php.ini文件中找到php-errors.log文件的定义位置。检查此文件以查找与ImageMagick安装相关的最近错误。

PDF文件需要Ghostscript
在安装和设置了以上所有内容之后,ImageMagick可以用于将图像转换为PHP,但无法用于将PDF文件转换为图像。对于这个最后一步,似乎还需要安装Ghostscript - 从https://www.ghostscript.com/download/gsdnld.html下载,并且只有安装64位版本的Ghostscript才能正常工作(即使我安装的其他所有内容都是32位版本)。安装Ghostscript就足够了;不需要对php.ini或任何其他配置进行更改。


1
我可以确认它也适用于XAMPP环境。 (经过4天的寻找合适的解决方案,终于找到了真正有效的方法!!) - kanlukasz
1
感谢您提供的解决方案。对于其他人来说,我的问题在于我需要一切都能在使用VC9(C++ 2008)编译的php 5.4.9上运行。堆栈是Windows 2008 R2和IIS 7.5。第3步中最新的依赖包也兼容5.4.9,是从https://windows.php.net/downloads/pecl/deps/archives/下载的“ImageMagick-6.8.9-1-vc9-x86.zip”。至于“php_imagick.dll”,最后一个为php 5.4.9编译的版本是3.4.1,可以在https://pecl.php.net/package/imagick/3.4.1/windows找到。 - puiu
1
最后,从https://ftp.icm.edu.pl/packages/ImageMagick/binaries/下载`ImageMagick-6.8.9-1-Q16-x86-dll.exe`文件本身。 - puiu

2

更新已接受的答案。环境为Win 7 32位,IIS 7.5,PHP 7.2(线程安全)通过FastCGIModule。Wordpress 5.5.3需要imagick模块。注意:如果你的代码需要imagick,截至2020年底,最新的非rc pecl包是php_imagick-3.4.4-7.4,它的php_imagick.dll与php 8.0不兼容。

发现PHP的“依赖项”包并不需要。这意味着imagemagick没有被php依赖项破坏,因此它仍然适用于Windows用户和PHP。

1. 获取Windows版ImageMagick

https://imagemagick.org/script/download.php#windows下载动态版本的Windows ImageMagick-...-x##-dll.exe。x##取决于你的系统。 仅供参考,这里测试了ImageMagick-7.0.10-43-Q16-x86-dll.exe。

2. 获取php_imagick模块

https://windows.php.net/downloads/pecl/releases/imagick/下载与你的php安装的“Thread Safety”匹配的最新imagick pecl包。在phpinfo输出中查找“Thread Safety”。避免使用发布候选包,那些带有“rc#”的名称。供参考,这里测试了线程安全版本php_imagick-3.4.4-7.2-ts-vc15-x86.zip。明显的共识是在IIS上使用非线程安全的php提供,但两者似乎都可以工作。IIS内部禁用php的线程管理并使用自己的线程管理。从这个40MB的存档中仅使用220KB的php_imagick.dll文件。跳过3。

4. 解除下载文件的阻止

打开它们的属性,如果出现“解除阻止”按钮,请点击它。

5. 安装Windows版Imagemagick

运行exe文件,不接受所有默认设置会有危险。安装向导将更新PATH环境变量,允许php命令访问imagick安装,在系统重启后生效。我听到那些窃笑声了。

6. 不需要PHP依赖项

关于原始的Imagemagick安装,CORE_RL_.dll位于根目录下,而其他安装说明中提到的php依赖项IM_MOD_RL_.dll文件位于根目录/modules/coders/目录下。为什么不在覆盖150多个dll文件并破坏原始安装之前在原始安装上尝试php呢?发生了什么变化或何时发生不得而知,但是php_magick.dll和magick.exe似乎很高兴共享原始安装。换句话说,在命令行上的imagick仍然可以工作。在进一步通知之前,“依赖项”不被视为依赖项。

7. & 8. 安装php_imagick模块

从zip归档文件中提取php_imagick.dll到php扩展目录。在被PHP解析的php.ini文件中添加“”行。

9. & 10. 确认PHP加载imagick模块

如果您安装了Windows版Imagemagick且尚未重启,请重新启动计算机。可选地,查找phpinfo()输出中的“imagick”条目。

11. 显示一张图片

从命令行进行快速测试。

magick wizard: %temp%/wizard.jpg
magick %temp%/wizard.jpg win:

一个php imagick示例
我说谎了;使用模块zip中的第二个文件。将examples/polygon.php提取到您的站点,然后浏览到polygon.php以确认imagick模块的某些功能。

I include a condensed version here for those just looking for a simple test.

<?php
// polygon.php
$Imagick = new Imagick();
$ImagickDraw = new ImagickDraw();
$ImagickPixel = new ImagickPixel();
$array = array( array( "x" => 378.1, "y" => 81.72 ),
                array( "x" => 381.1, "y" => 79.56 ),
                array( "x" => 384.3, "y" => 78.12 ),
                array( "x" => 387.6, "y" => 77.33 ),
                array( "x" => 391.1, "y" => 77.11 ),
                array( "x" => 394.6, "y" => 77.62 ),
                array( "x" => 397.8, "y" => 78.77 ),
                array( "x" => 400.9, "y" => 80.57 ),
                array( "x" => 403.6, "y" => 83.02 ),
                array( "x" => 523.9, "y" => 216.8 ),
                array( "x" => 526.2, "y" => 219.7 ),
                array( "x" => 527.6, "y" => 223 ),
                array( "x" => 528.4, "y" => 226.4 ),
                array( "x" => 528.6, "y" => 229.8 ),
                array( "x" => 528.0, "y" => 233.3 ),
                array( "x" => 526.9, "y" => 236.5 ),
                array( "x" => 525.1, "y" => 239.5 ),
                array( "x" => 522.6, "y" => 242.2 ),
                array( "x" => 495.9, "y" => 266.3 ),
                array( "x" => 493, "y" => 268.5 ),
                array( "x" => 489.7, "y" => 269.9 ),
                array( "x" => 486.4, "y" => 270.8 ),
                array( "x" => 482.9, "y" => 270.9 ),
                array( "x" => 479.5, "y" => 270.4 ),
                array( "x" => 476.2, "y" => 269.3 ),
                array( "x" => 473.2, "y" => 267.5 ),
                array( "x" => 470.4, "y" => 265 ),
                array( "x" => 350, "y" => 131.2 ),
                array( "x" => 347.8, "y" => 128.3 ),
                array( "x" => 346.4, "y" => 125.1 ),
                array( "x" => 345.6, "y" => 121.7 ),
                array( "x" => 345.4, "y" => 118.2 ),
                array( "x" => 346, "y" => 114.8 ),
                array( "x" => 347.1, "y" => 111.5 ),
                array( "x" => 348.9, "y" => 108.5 ),
                array( "x" => 351.4, "y" => 105.8 ),
                array( "x" => 378.1, "y" => 81.72 ),
              );
$ImagickPixel->setColor( 'gray' );
$Imagick->newImage( 700, 500, $ImagickPixel );
$Imagick->setImageFormat( 'png' );
$ImagickDraw->polygon( $array );
$Imagick->drawImage( $ImagickDraw );
header( "Content-Type: image/{$Imagick->getImageFormat()}" );
echo $Imagick->getImageBlob( );
?>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接