首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Imagick转换与imagick PHP

Imagick转换与imagick PHP
EN

Stack Overflow用户
提问于 2016-01-18 07:06:00
回答 3查看 1.2K关注 0票数 0

因此,我创建了一个站点,使用php脚本创建缩略图,使用imagick创建缩略图。在我的个人网络主机(主机),这是很好的工作。当我复制我的网站并将其上传到我的客户站点(托管在domain.com上)时,它失败了。问Domain.com出了什么事,他们说:

“我们有ImageMagick二进制文件。但是它不符合PHP,所以IMAGICK就不能工作。因此,您将不能使用IMAGICK作为PHP内置类。您必须使用替代的‘转换’实用程序。”

我以前从未使用过“转换实用程序”,所以我不知道他们在说什么。我该多调查一下吗?或者解雇他们,然后坚持我原来的主机(主机),imagick在PHP中工作吗?我觉得我应该了解这一选择,以便更全面地了解我的知识,但我想知道是否值得我花时间去学习它,或者干脆忘掉它,继续前进。

关于如何向前推进的建议,或关于这一备选方案的资源,将不胜感激。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-18 09:26:29

他们所谈论的是使用PHP的exec()函数来执行ImageMagick,就像从命令行执行ImageMagick一样。在命令行中有数百个使用ImageMagick的示例,只需搜索ImageMagickconvert,这是您在命令行中使用的主要二进制文件的名称。

语法非常简单:

代码语言:javascript
复制
convert input.png ...<processing> ... output.png

所以,你可能会

代码语言:javascript
复制
convert input.jpg -thumbnail x320 -quality 80 result.png

如果您想在PHP中这样做,ISP建议您使用:

代码语言:javascript
复制
$cmd = "/usr/local/bin/convert '/path/to/input.jpg' -thumbnail x320 -quality 80 '/path/to/result.png'";
exec($cmd, $output, $retval);

我真的不能对相对效率、优点或其他方面发表评论(尽管他们有懒惰或无能的味道),但应该能正常工作。

票数 2
EN

Stack Overflow用户

发布于 2016-01-18 17:42:01

就像我说的,人们首先从一些简单的事情开始。对同一文件夹中的图像进行简单的调整大小的代码;如果有效,请转到下一步。

您需要关闭安全模式,使用phpsusex或任何称为phpsusex的方式,您将需要755的CHMOD,否则图像保存到的文件夹上有777。

尝试:

代码语言:javascript
复制
$cmd = "input.jpg -thumbnail x200 -quality 100 output.jpg";
exec("convert $cmd");

您可能必须使用路径进行转换,但如果Imagemagick安装正确,则只需使用to即可。

在某些情况下,Imagick比Imagemagick更快,就像前面所说的,如果您接受用户的输入,请确保您在验证数据方面做得很好。

在另一个主题上,我尝试将命令中的代码保持简单,以便将所有的$thumbsPath.basename($file,".jpg")保存为变量,并在IM代码中使用。尤其是在这种情况下,因为您在代码中使用了两次。

您还可以回显$cmd以确认它实际上包含了什么;有时它并不是您所期望的!

票数 1
EN

Stack Overflow用户

发布于 2016-01-18 16:00:31

好的,我正在尝试实现这个替代方式,但我不确定我是否正确地执行它。目前,这是我的代码,我得到了一个内部500错误。不幸的是,我无法理解如何获得用domain.com生成的错误消息,所以我在这里有点盲目。

使用上面的$cmd = "/usr/local/bin/convert '/path/to/input.jpg' -thumbnail x320 -quality 80 '/path/to/result.png'"; exec($cmd, $output, $retval);

我试图为输入路径和结果路径插入一对变量:

代码语言:javascript
复制
$thumbsPath = "./RecentAdditions_thumbnails/";
if (!file_exists($thumbsPath)) {
    mkdir($thumbsPath, 0777, true);
}

foreach($files as $file)
    if(!file_exists($thumbsPath.basename($file, ".jpg")."_thumb.jpg")){
        $cmd = "/usr/local/bin/convert ''./'"$file"' -thumbnail x200 -quality 100 '"$thumbsPath.basename($file, ".jpg")."_thumb.jpg'";
        exec($cmd, $output, $retval);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34848963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档