【问题标题】:How to use Remote File within Imagemagick Command in PHP如何在 PHP 中的 Imagemagick 命令中使用远程文件
【发布时间】:2018-07-27 21:01:50
【问题描述】:

我目前在共享托管网络空间上使用 Imagemagick。 Imagemagick 也安装在这个网站上。它的 versionString 是 ImageMagick 6.8.9-9 Q16 x86_64 2018-06-26,它的 versionNumber 是 1673

现在我的问题或问题: 我想将 REMOTE FILE 例如 https://www.google.com/favicon.ico 转换为 png 图像以供以后使用。为了实现这一点,我目前正在使用这个 PHP 脚本:

<?php
   exec( "/usr/bin/convert convert https://www.google.com/favicon.ico favicon.png" );
?>

但此命令不会在同一文件夹中创建文件 favicon.png。但是,如果我下载 favicon.ico 文件并将其存储在服务器上,我可以使用此命令并且它可以完美运行:

<?php
   exec( "/usr/bin/convert convert favicon.ico favicon.png" );
?>

那么如何在 imagemagick 中使用带有 convert 命令的远程文件而不将文件存储在我的服务器上?我还尝试使用$Imagick-&gt;getImageBlob(); -> https://secure.php.net/manual/de/imagick.getimageblob.php 创建一个新的图像对象,并将输出插入到 exec();像这样的命令

<?php
exec( "/usr/bin/convert convert " . $Imagick->getImageBlob() . "favicon.png" );
?> 

在 PHP 中。但它只显示该命令可能是攻击的错误。

希望您能帮我解决这个问题,提前谢谢!

PS: I can not edit anything in the Imagemagick settings or update the class/package either.

【问题讨论】:

  • 如果您的命令创建文件失败,可能是因为出于安全原因阻止了 HTTPS。这可能就是您收到该警告的原因。该限制将在 ImageMagick policy.xml 文件中设置,并且可能是默认设置。但只有您的托管服务提供商才能取消该限制。如果您的托管服务提供商允许使用这些工具中的任何一个,您可能需要使用 wget 或 curl 下载文件并将其通过管道传输到 ImageMagick。
  • 感谢@fmw42 为您解答。是的 curl 可用。明天我会尝试并联系我的托管服务提供商,询问是否阻止了 https。

标签: php imagemagick exec imagick


【解决方案1】:
wget -O- https://www.google.com/favicon.ico | convert  ico:- favicon.jpg

说明: 您应该使用“wget”下载文件并输出到标准输出,然后将其通过管道传输到“convert”。 "ico:-" - 这意味着输入文件类型 "image/ico" 并从标准输入中获取。

或者直接使用:

 $imagick = new Imagick();
 $imagick->readImageBlob("https://www.google.com/favicon.ico");
 $image->writeImage('favicon.png');

【讨论】:

  • 不错。谢谢!也为你的解释。太棒了。 :) 竖起大拇指。
  • 哦,但是我建议使用 favicon.png 而不是 favicon.jpg,否则输出的图像会看起来有点模糊。 PNG 解决了这个问题。
  • wget -O- google.com/favicon.ico |转换 ico:- favicon.png
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
  • 2018-04-09
  • 1970-01-01
相关资源
最近更新 更多