这是在Windows Server 2012R2 (64位)服务器上,使用IIS作为Web服务器应用程序。然而,我安装了所有与ImageMagick相关的软件的32位版本,因为Web服务器应用程序(IIS)是32位的。以下显示的是截至2017年10月最新的版本。
从菜单栏中点击"下载"
这取决于你是如何下载的,但如果需要,你应该始终检查并“解除阻止”下载的文件。
如果你不“解除阻止”下载的文件,特别是ZIP文件,安装或复制的各个文件仍可能被标记为“已阻止”,这有时会在运行软件时引起一些奇怪的问题。
安装完成后,为了测试是否成功,打开命令提示符并运行以下两个命令:
magick wizard: wizard.jpg
magick wizard.jpg win:
这应该显示一个“IMDisplay”窗口,显示一个在画架前创作蒙娜丽莎肖像的巫师的草图/图像。
IM_MOD_RL_*.dll
文件(125个文件)复制到安装的ImageMagick版本的文件夹中,例如C:\Program Files (x86)\ImageMagick-7.0.7-Q16
CORE_RL_*.dll
文件(20个文件)复制到安装的ImageMagick版本的文件夹中,例如C:\Program Files (x86)\ImageMagick-7.0.7-Q16
* * 如果您想要覆盖/重命名,请选择覆盖
php_imagick.dll
复制到服务器上已安装的PHP版本的"ext"文件夹中,例如C:\php\7.1\ext
。不要复制CORE_RL_*文件
在网上的一些文章中,您会看到有关复制此套件中的CORE_RL_*文件以替换ImageMagick文件夹中的文件的说明,但这是不正确的;这些文件的适当版本已在步骤6中复制。
Add the following line to the section containing the other extensions:
extension=php_imagick.dll
重新启动IIS似乎不足以解决问题,您需要重新启动整个计算机。这可能与IIS无法识别Imagick输入的PATH条目有关。
在Web根目录中创建一个包含以下内容的PHP文件:
在Web浏览器中访问此文件,
它应该看起来像下面这样:
imagick imagick 模块: 已启用 imagick 模块版本 3.4.3重要提示:
如果“支持的格式”部分没有显示任何格式,或者只显示了少量格式,则最可能的原因是您错过了将一个或多个IM_MOD_RL_*或CORE_RL_* DLL文件复制到ImageMagick文件夹中,或者您从“php_magick”工具包中复制了它们。
在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-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或任何其他配置进行更改。
更新已接受的答案。环境为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。
从https://imagemagick.org/script/download.php#windows下载动态版本的Windows ImageMagick-...-x##-dll.exe。x##取决于你的系统。 仅供参考,这里测试了ImageMagick-7.0.10-43-Q16-x86-dll.exe。
从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。
打开它们的属性,如果出现“解除阻止”按钮,请点击它。
运行exe文件,不接受所有默认设置会有危险。安装向导将更新PATH环境变量,允许php命令访问imagick安装,在系统重启后生效。我听到那些窃笑声了。
关于原始的Imagemagick安装,CORE_RL_.dll位于根目录下,而其他安装说明中提到的php依赖项IM_MOD_RL_.dll文件位于根目录/modules/coders/目录下。为什么不在覆盖150多个dll文件并破坏原始安装之前在原始安装上尝试php呢?发生了什么变化或何时发生不得而知,但是php_magick.dll和magick.exe似乎很高兴共享原始安装。换句话说,在命令行上的imagick仍然可以工作。在进一步通知之前,“依赖项”不被视为依赖项。
从zip归档文件中提取php_imagick.dll到php扩展目录。在被PHP解析的php.ini文件中添加“”行。
如果您安装了Windows版Imagemagick且尚未重启,请重新启动计算机。可选地,查找phpinfo()输出中的“imagick”条目。
从命令行进行快速测试。
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( );
?>