【问题标题】:how to use -auto-level +level-colors command argument into PHP ImageMagick如何在 PHP ImageMagick 中使用 -auto-level +level-colors 命令参数
【发布时间】:2020-10-27 20:20:15
【问题描述】:

我正在转换具有特定颜色的图像,并且可以使用 magick 命令正常工作,下面是我的命令,

magick image.png -channel RGB -colorspace gray -auto-level +level-colors '#f48023', result.png

它工作得很好,现在我将此命令转换为PHP 代码,但不确定-auto-level+level-colors 参数。这是我的代码,

$image = new Imagick('image.png');
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
$image->setImageColorspace(Imagick::COLORSPACE_RGB);
$image->setImageType(Imagick::IMGTYPE_GRAYSCALE);
$image->opaquePaintImage('','#f48023', 0, true);
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);
header("Content-Type: image/png");
echo $image->getImageBlob();

而且输出看起来一点都不好,

这是我的原图

**编辑(更新代码)**

$im = new Imagick();
$image = new Imagick('logo3.jpg');
list ($width, $height) = array_values ($image->getImageGeometry ());
$im->newImage(1, $height,new ImagickPixel('#f48023'));
$im->newImage(1, $height,new ImagickPixel('#FFF'));
$im->resetIterator();
$combine  =$im->appendImages(true);

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
$image->setImageColorspace(Imagick::COLORSPACE_GRAY);
$image->contrastStretchImage(1,1,Imagick::CHANNEL_GRAY);
$image->clutImage($combine);
$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);

header("Content-Type: image/png");
echo $image;

这段代码的输出如下

logo3.jpg 在这里

【问题讨论】:

    标签: php imagemagick imagemagick-convert


    【解决方案1】:

    在 PHP Imagick 中尝试此操作,我已将 resizeImage 添加到您的组合图像中。您可以尝试使用 FILTER_TRIANGLE 代替 FILTER_CUBIC,看看您更喜欢哪个。我还用 autoLevelImage 替换了您的 contrastStretchImage。

    $im = new Imagick();
    $image = new Imagick('logo3.jpg');
    list ($width, $height) = array_values ($image->getImageGeometry ());
    $im->newImage(1, $height,new ImagickPixel('#f48023'));
    $im->newImage(1, $height,new ImagickPixel('#FFF'));
    $im->resetIterator();
    $combine  =$im->appendImages(true);
    $combine->resizeImage(1024,1,Imagick::FILTER_CUBIC,1)
    
    $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
    $image->setImageColorspace(Imagick::COLORSPACE_GRAY);
    $image->autoLevelImage();
    $image->clutImage($combine);
    $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_ACTIVATE);
    
    header("Content-Type: image/png");
    echo $image;
    

    【讨论】:

      【解决方案2】:

      https://www.php.net/manual/en/imagick.autolevelimage.php查看 autoLevelImage

      我没有看到任何与 +level-colors 等效的东西。但是您可以通过创建一个两像素彩色地图图像来获得类似的效果,通过附加两个 1 像素图像来为两种颜色中的每一种颜色一个像素。见https://www.php.net/manual/en/imagick.appendimages.php

      然后使用 clutImage 将颜色映射图像中的颜色应用于处理后的图像。见https://www.php.net/manual/en/imagick.clutimage.php

      补充:

      这就是我的意思是使用 ImageMagick 命令行作为 -auto-level 和 +level-colors 的替代品。在第一个命令中,我使用 -auto-level 和 +level-colors。在第二个命令中,我使用 -contrast-stretch 0(相当于 -auto-level)和带有 -clut 的彩色地图图像,相当于 +level-colors。


      输入:

      magick lorem_ipsum.png -colorspace gray -contrast-stretch 0 +level-colors '#f48023,' lorem_ipsum_recolor1.png 
      

      magick \( lorem_ipsum.png -colorspace gray -contrast-stretch 0 \) \
      \( -size 1x1 xc:"#f48023" xc:white +append -filter cubic -resize 1024 \) \
      -clut lorem_ipsum_recolor2.png 
      

      我认为不需要 -colorspace RGB,这会使颜色呈线性且更暗。如果要从其他颜色空间转换,请使用 -colorspace sRGB。

      【讨论】:

      • 谢谢您的回答,您有一些如何使用它的例子吗?我是ImageMagick 的新手 :)
      • 我通常不使用 Imagick。但我知道 ImageMagick。我刚刚查看了 Imagick 的文档,并找到了与我在 ImageMagick 中所做的等效功能。
      • 您所说的“将颜色映射图像中的颜色应用于处理后的图像”是什么意思,您能解释一下吗?
      • 在我的回答中查看我的补充。我向您展示了 ImageMagick 命令行等价物。在我最初的回答中,我建议您可以使用 autoLevelImage(或 contrastStretchImage)和 clutImage。所以我认为你现在可以从我提到的命令和 ImageMagick 等效命令中提取正确的 PHP 脚本。
      • 谢谢,好的,让我尝试在我遇到问题的 PHP 脚本中进行转换,因为我能够使用命令行而不是 PHP 脚本来转换图像,
      猜你喜欢
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2011-03-07
      • 1970-01-01
      • 2021-11-05
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多