我有一个Windows Web服务器2012r2,希望在其上安装Imagemagick php扩展名,但是以下everything I've tried以下未能使它显示在phpinfo()中。
如何使imagemagick运行?我找不到IIS的有效安装步骤。
答案 0 :(得分:1)
更新为接受的答案。环境是FastCGIModule的Win 7 32位,IIS 7.5,PHP 7.2(线程安全)。为imagick模块搅动了Wordpress 5.5.3。注意:如果您的代码要求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安装的“线程安全性”相匹配的最新imagick pecl软件包。在您的phpinfo输出中找到“线程安全”。避免使用候选发布程序包,这些程序包的名称中带有“ 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位于根目录中,而IM_MOD_RL _ .dll文件(在其他安装方向中称为php依赖项)位于root / modules /中。编码器/目录。为什么不尝试在原始安装中尝试php,然后覆盖150多个dll并破坏原始安装?更改了什么,或什么时候不知道,但php_magick.dll和magick.exe似乎都乐于共享原始安装。换句话说,imagick在命令行上仍然有效。直到另行通知,才将“依赖关系”视作如此。
从zip压缩文件中提取php_imagick.dll到php扩展目录。将行“”添加到PHP解析的php.ini中。
如果自从安装Windows版Imagemagick之后没有重新启动。 (可选)在phpinfo()输出中查找“ imagick”的条目。
从cmdline快速测试
magick wizard: %temp%/wizard.jpg
magick %temp%/wizard.jpg win:
一个PHP imagick示例
我撒了谎;使用模块zip中的第二个文件。将examples / polygon.php提取到您的站点,然后浏览到polygon.php以确认imagick模块的某些功能。
我为那些只想进行简单测试的人提供了一个精简版。
<?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( );
?>
答案 1 :(得分:0)
最终,我遇到了blogpost,它是repost of a deleted post的PhilipD,它以错误的格式发布并且未得到纠正。所以问题被删除了。
我在这里重新发布PhilipD的答案,这样可以使遇到相同问题的人更容易找到答案,因为花了半天的时间才找到有效的blog post。这些步骤详细介绍了32位安装。我为我的64位php执行了64位安装。
这是在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中复制了这些文件的相应版本。
将以下行添加到包含其他扩展名的部分:
extension=php_imagick.dll
重新启动IIS似乎还不够,您需要重新启动整个计算机。这可能与IIS无法识别Imagick输入的PATH条目有关。
在Web根目录中创建一个PHP文件,其中包含以下内容:
在网络浏览器中访问此文件
它应该如下所示:
imagick imagick模块:已启用imagick模块3.4.3版本
imagick类Imagick,ImagickDraw,ImagickPixel,ImagickPixelIterator,ImagickKernel
使用ImageMagick版本ImageMagick 6.9.3-7 Q16 x86编译的Imagick 2016年3月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,剪切,数据,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,传真,FITS,FPX,分形,FTS,G3,GIF,GIF87,梯度,灰色,GROUP4,GV,H,HALD,HDR,直方图,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,预览,PS,PS2,PS3,PSB,PSD,PTIF,PWP,径向梯度,RAF,RAS,RAW,RGB,RGBA,RGBO,RGF,RLA,RLE,RMF,RW2,SCR,SCREENSHOT,SC T,SFW,SGI,SHTML,SIX,SIXEL,SPARSE-COLOR,SR2,SRF,STEGANO,SUN,TEXT,TGA,THUMBNAIL,TIFF,TIFF64,TILE,TIM,TTC,TTF,TXF,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”工具包中复制了它们。
在Web根目录中创建一个PHP文件,其中包含以下内容(我从“ Verify 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!”的图像。
检查php-errors.log文件是否存在任何错误。
您可以在php.ini文件中找到php-errors.log文件的定义位置。检查此文件中是否有与ImageMagick安装相关的最新错误。
PDF文件需要Ghostscript
安装并设置完上述所有内容之后,ImageMagick可以在PHP中用于转换图像,但不能用于将PDF文件转换为图像。对于最后一步,似乎也有必要从https://www.ghostscript.com/download/gsdnld.html安装Ghostscript,并且只有在我安装了64位版本的Ghostscript的情况下,它才能正常工作(即使我安装的其他所有版本都是32位版本) )。只需安装Ghostscript。无需更改php.ini或任何其他配置。