【问题标题】:What is Imagick equivalent of following Imagemagick command?什么是 Imagick 等效于以下 Imagemagick 命令?
【发布时间】:2014-02-09 09:25:48
【问题描述】:

以下 Imagemagick 命令的 Imagick 等效项是什么?

convert i.jpg -set colorspace RGB ( -clone 0 -fill black -colorize 100% ) ( -clone 0 colorspace gray -negate ) -compose blend -define compose:args=70,30 -composite o.jpg

我执行了以下 Imagick 命令,但似乎不一样

$img = new Imagick("i.jpg");
$img->setImageColorspace(Imagick::COLORSPACE_RGB);
$clone1 = $img->clone();
$clone1->colorizeImage('black', 1.0);
$clone2 = $img->clone();
$clone2->setImageColorspace(Imagick::COLORSPACE_GRAY);
$clone2->negateImage(0);
$img->setOption('compose:args', '70x30');
$img->compositeImage($clone1, Imagick::COMPOSITE_BLEND, 0, 0);
$img->compositeImage($clone2, Imagick::COMPOSITE_BLEND, 0, 0);
$img->writeImage("o.jpg");

我哪里做错了?

【问题讨论】:

    标签: php imagemagick imagick imagemagick-convert


    【解决方案1】:

    在大多数情况下,您所拥有的都是正确的。需要解决两个小问题以匹配 CLI 结果。

    首先

    在读取Imagick 对象中的任何图像之前移动setOption 行。

    $img = new Imagick();
    $img->setOption('compose:args', '70x30');
    $img->readImage("i.jpg");
    // ...
    

    第二

    将黑色着色为 100% 通常会生成纯黑色图像。无论出于何种原因,MagickColorizeImage 方法都没有效果。在 PHP.net 的 documentation 的 cmets 中列出了一些使用 ImagickDraw 和背景颜色分配的解决方法。我建议重新访问您的第一张 $clone1 图像。

    【讨论】:

    • 感谢您的帮助!为什么我们需要在读取图片之前执行 setOption?
    • 我想这种行为可能与 PHP 的内存中复制架构有关,而不是您在 ImageMagick(或任何)标准库中所期望的传统指针、引用和分配。最后,这是用户空间中存在的一个小问题,而不是库或 API。
    • 好的。谢谢!我还有一个关于 imagick 的问题stackoverflow.com/questions/21248421/… 你也可以回答一下吗?
    • @emcconville 你能检查一下这个问题吗? stackoverflow.com/questions/62777570/…
    猜你喜欢
    • 2012-07-14
    • 2020-06-06
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多