PHP:显示 ImageMagick 图像而不保存到像 GD 这样的服务器

Posted

技术标签:

【中文标题】PHP:显示 ImageMagick 图像而不保存到像 GD 这样的服务器【英文标题】:PHP: Displaying ImageMagick image without saving to server like GD 【发布时间】:2012-10-20 16:11:05 【问题描述】:

这个问题已经被问过(见下面的链接),但没有一个答案有效。所以我有这个 ImageMagick 脚本,我用它来为 PNG 着色,它工作得很好,但问题是它实际上在服务器上生成文件。相反,我想要的是 GD 在进行图像处理然后显示它而不实际保存图像的地方。

这是我用来为图像着色的 ImageMagick 代码。此代码执行转换并在服务器上生成一个额外文件,即最终图像。

<?php

$source = "src.png";
$final = "FINAL.png";
$color = "#00FF00";

exec("convert $source  -threshold 100% +level-colors '$color',   $final");

?>

这是一个 GD 示例代码,它进行图像处理并直接显示最终图像,而无需将额外的图像保存到服务器:

<?php
header('Content-Type: image/png');

$source = "src.png";

$im = imagecreatefrompng($source);
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagepng($im);
imagedestroy($im);

?>

所以基本上我想要在第一个示例中完成的图像处理,但不保存额外的图像并在浏览器中显示输出。

搜索的链接:

所有解决方案均无效: Generate images with ImageMagick without saving to file but still display them on website

如何将我的 ImageMagick 代码转换为 iMagick? PHP-Imagemagick image display

【问题讨论】:

您可以尝试将- 作为输出文件名。许多命令行应用程序将其用作简单打印输出而不是保存到文件的信号。但是请记住... cli 应用程序不知道它们正在被基于 Web 的脚本调用。将图像的原始二进制内容输出到控制台不会神奇地使该图像可见。 所以- 完全按照你说的做了,但是图像存储在哪里以便我可以显示它? 它将被转储到 imagick 的标准输出中,该标准输出将返回给 php。所以切换到passthru() 而不是 exec() 哇哦,成功了。非常感谢!您是要发布答案以便其他人知道还是我应该知道? 命令行的东西不知道如何处理 url。 PHP 提供了方便的处理程序,您可以传入一个 url 并将其视为本地文件,但这仅适用于 php 自己的内部。命令行位不是 php 的一部分,您只是在 php 中运行它们,因此无法使用这些便利。先下载文件,再转换。 【参考方案1】:

使用您的代码的直接示例供其他人学习。 我在 Godaddy 上的共享 Linux 服务器上使用相同的方法。

<?php
    $source = "src.png";
    $color = "#00FF00";

    $cmd = "convert $source -threshold 100% +level-colors '$color',".
    " -unsharp 0.2x0.6+1.0 -quality 50 JPG:-";

    header("Content-type: image/jpeg");
    passthru($cmd, $retval); 
    exit();
?>

注意: - 您确定您正确使用了“-threshold 100% +level-colors '$color',”吗?阈值 100% 会将图像推为黑色。然后 +level-colors '#00FF00', 只会制作一个纯绿色图像。我假设您已经简化了此演示的代码。

注意:-“+level-colors '$color'”,在 Godaddy 的服务器上不起作用。不过,它在我的家庭服务器上运行良好。可能是 Godaddy 的服务器上安装了过时的 ImageMagick 版本。

【讨论】:

以上是关于PHP:显示 ImageMagick 图像而不保存到像 GD 这样的服务器的主要内容,如果未能解决你的问题,请参考以下文章

ImageMagick 和 PHP 正确旋转图像

使用 ImageMagick C++ API 读取 PDF 中的页面数量,而不读取所有图像

php图像文件上传并转换为base64而不保存图像

PHP 或 Imagemagick :图像中主要颜色的数量

请帮我保存一个在 ImageMagick 中写入的额外图像

调整图像大小并显示而不保存