如何在 PHP ImageMagick 中使用 -auto-level +level-colors 命令参数
how to use -auto-level +level-colors command argument into PHP ImageMagick
我正在转换具有特定颜色的图像,使用 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 在这里
请参阅 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。
在 PHP Imagick 中试试这个,我已将 resizeImage 添加到您的组合图像中。您可以尝试 FILTER_TRIANGLE 代替 FILTER_CUBIC,看看您更喜欢哪一个。我还将您的 contrastStretchImage 替换为 autoLevelImage。
$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;
我正在转换具有特定颜色的图像,使用 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 在这里
请参阅 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。
在 PHP Imagick 中试试这个,我已将 resizeImage 添加到您的组合图像中。您可以尝试 FILTER_TRIANGLE 代替 FILTER_CUBIC,看看您更喜欢哪一个。我还将您的 contrastStretchImage 替换为 autoLevelImage。
$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;