我的网络服务器安装了ImageMagick并且可用(并且工作正常),所以我想使用它。为此,我需要在我的localhost上运行它来测试代码等。
我在Windows 8.1上使用当前版本的XAMPP(版本5.6.14)与Apache / 2.4.17(Win32)和PHP / 5.6.16
要在本地安装ImageMagick,我在根目录下创建了这个目录:
C:\ ImageMagick的
然后,从这里开始:
http://windows.php.net/downloads/pecl/deps/
...我下载了与DLL相匹配的X86线程安全版本(你必须单独获取,这让我感到困惑)。我下载的版本是:
ImageMagick-6.9.1-2-vc11-x86.zip
我将它解压缩到C:\ ImageMagick然后移动其" bin"的内容子文件夹到C:\ ImageMagick,以便所有内容都在该目录的根目录中。
然后我将C:\ ImageMagick添加到我的PATH并通过首次执行"转换"验证它是否有效。从另一个目录的命令行,然后导致帮助屏幕信息显示。然后,我通过成功执行从命令行调整大小的图像,进一步验证了它的工作原理。到目前为止一切都很好。
然后,根据其他在线帖子中提出的有关如何执行此操作的建议,我将CORE_RL_.DLL文件和IM_MOD_RL.DLL文件从C:\ ImageMagick复制到c:\ xampp \ apache \ bin
然后我添加了这个系统环境变量:
MAGICK_HOME=c:\imagemagick
下一步是将php_imagemagick.dll添加到XAMPP中的php \ ext文件夹中,但ImageMagick ZIP文件/ EXE中没有这样的DLL。为了得到它,我不得不去这里:
http://windows.php.net/downloads/pecl/releases/imagick/3.3.0rc2/
...并下载:
php_imagick-3.3.0rc2-5.6-ts-vc11-x86.zip
...然后我把它解压缩到一个专门的"垃圾"目录并将其包含的php_imagemagick.dll文件复制到c:\ xampp \ php \ ext
然后我编辑了c:\ xampp \ php中的php.ini文件以包含该指令:
extension=php_imagemagick.dll
现在......真相的时刻:
我启动了XAMPP并检查了PHP_ERROR_LOG,发现没有错误。然后我运行PhpInfo.php并确认ImageMagick已加载;这是屏幕截图:
现在,当从我的实时服务器(DreamHost)运行以下脚本时,它会成功转换X.JPG图像,如下所示:
<?php
if (!extension_loaded('imagick')) {
echo "imagick not installed...";
} else {
echo "imagick installed...";
}
echo "Start...";
$uploaded_filename = "x.jpg";
$im = new Imagick();
echo "Created object...";
$im->readImage("x.jpg");
echo "Read JPG...";
$im->resizeImage(528, 0, Imagick::FILTER_LANCZOS2SHARP, 1);
$im->stripImage();
$im->writeImage("x_lg.jpg");
$im->clear();
$im->destroy();
echo "Done."
?>
但是,当我从localhost运行它时,它会创建$ im(ImageMagick对象),但它不会继续使用readImage()函数读取图像(&#34;创建对象) ...&#34;写入屏幕,但除此之外没有任何内容,也没有创建输出文件。)
有关我在安装中可能省略的内容的任何建议吗?
答案 0 :(得分:1)
事实证明,ImageMagick需要图像文件的完整路径,即使它们与在其上执行ImageMagick的脚本位于同一目录中。就这么简单。这是如何做到的:
假设您的图片保存在网站根目录下的“图片”文件夹中。在XAMPP localhost上,完整路径可能是:
C:/xampp/htdocs/mysite/images/x.jpg
因此:
$_SERVER['DOCUMENT_ROOT'] would hold "C:/xampp/htdocs/mysite";
$path_to_your_files = "images/";
$image_file_name = "x.jpg";
将这一切与此字符串放在一起:
$my_image = $_SERVER['DOCUMENT_ROOT'] . "/" . $path_to_your_files . $image_file_name;
在实时服务器上,完整路径可能是:
/the_inaccessible_superfolders_of_your_website/mysite.com/images/x.jpg
因此:
$_SERVER['DOCUMENT_ROOT'] would hold "/the_inaccessible_superfolders_of_your_website/mysite.com"
$path_to_your_files = "images/";
$image_file_name = "x.jpg";
再次,将这一切与这个字符串放在一起:
$my_image = $_SERVER['DOCUMENT_ROOT'] . "/" . $path_to_your_files . $image_file_name;
这是new Imagick($my_image);
必须提供的才能使其发挥作用。我希望这有助于其他人在解决这个问题。
答案 1 :(得分:0)
对于完整路径,您可以使用:
realpath('images/x.jpg')
而不是
C:/xampp/htdocs/mysite/images/x.jpg