PHP ImageMagick - 修改颜色

在本章中,您将学习使用 Imagemagick 提供的一些内置函数来修改和替换图像中的不同颜色。

使用Imagemagick,您可以调整亮度、对比度、色调、饱和度和其他颜色参数。 您甚至可以创建复杂的效果,例如合并多个图层或向照片添加特殊滤镜。 本教程将概述 PHP Imagemagick 的工作原理以及如何使用它快速轻松地修改数字图像中的颜色。

对图像进行着色

Imagemagick 的"colorizeImage()"函数是更改图像任何部分颜色的有效方法。 此功能的工作原理是将所选的填充颜色与图片中的每个像素混合,创建颜色之间的无缝过渡并产生专业外观的结果。

  • 该过程消除了与更改图像颜色相关的大量体力劳动,例如选择特定区域或手绘部分。

  • 此外,它还可以节省时间,因为它允许用户快速轻松地进行这些更改,而不会牺牲质量。

语法

public Imagick::colorizeImage(mixed $colorize, mixed $opacity, bool $legacy = false): bool

这个函数有2个参数 − colorizeopacity。

  • Colorize 是一个 Imagick 对象或包含着色颜色的字符串,

  • opacity 是一个 Imagick 对象或包含不透明度值的浮点值。

如果不透明度为 1.0,则完全不透明,0.0 表示完全透明。

示例

在这个例子中,您将能够清楚地理解'colorizeImage()'的用法。首先创建一个imagick对象并获取输入图像。 然后,应用'colorizeImage()'函数并获取所需的参数(colorize=red 和 opacity=1)。 混合颜色后的图像使用'writeImage()'函数显示输出。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->colorizeImage('red', 1, true);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/colorizeImage.png");
?<

假设以下是程序中的输入图像(image.png)−

对图像进行着色

输出

对图像进行着色

创建蓝色偏移图像

当需要表示月光下或夜间的图像时,您可以使用方法'blueShiftImage()'来实现。该方法以图像为参数,对图像的颜色进行静音,以模拟月光下的夜间场景并产生输出图像。

  • 还可能涉及调整亮度级别、饱和度、对比度和其他功能,以确保最终结果尽可能接近在自然光条件下观看这些图像时的预期。

  • 此外,此技术还可用于创意目的; 通过操纵颜色值,可以在黄昏时分甚至在人工照明的室内拍摄照片来实现有趣的效果。

语法

public Imagick::blueShiftImage(float $factor = 1.5): bool

该函数采用一个因子值作为其参数。 它指定使图像颜色静音的值。

示例

此示例展示了'blueShiftImage()'函数的实现。 创建一个新的 imagick 对象并将图像作为输入。 现在,应用'blueShiftImage()'函数,并以factor为参数,获得的输出图像的形式为'blueShiftImage.png'。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->blueShiftImage(2);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/blueShiftImage.png");
?>

假设下面是程序中的输入图像(image.png)&Minus;

创建蓝色偏移图像

输出

创建蓝色偏移图像

替换图像中的颜色

在本部分中,您将学习替换图像中的颜色。 Imagemagick 中有一个名为 'clutImage()' 的内置函数来执行此任务。 借助此功能,图像中的所有颜色都将替换为用户需要的特定颜色。 该函数将图像作为输入,并在替换颜色后生成图像作为输出。

'clutImage()'函数用途广泛,可以用来实现多种不同的效果。 例如,您可以使用它通过用一种颜色替换原始图像中的所有颜色来创建单色图像。

您还可以使用它通过将较暗的色调替换为较亮的色调来为现有照片添加活力和对比度。

语法

public Imagick::clutImage(Imagick $lookup_table, int $channel =Imagick::CHANNEL_DEFAULT): bool

该函数接受 2 个参数。

  • lookup_table是一个包含颜色查找表的Imagick对象

  • channel 是 Channeltype 常量。

示例

在以下示例中,创建了一个 <>bImagick 对象,并使用图像作为其输入。 然后创建第二个 Imagick 对象并生成一个新图像,该图像从查找表中选择"紫色"。 `clutImage()` 方法用于替换颜色,其中已指定 'violet' 并且未声明 ChannelType 常量; 因此,将使用默认通道。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/imagee.png");
   $clut = new Imagick();
   $clut->newImage(1, 1, new ImagickPixel('violet'));
   $image->clutImage($clut);
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/clutImage.png");
?>

假设以下是程序中的输入图像(image.png)−

替换颜色图像

输出

替换颜色图像

图像否定

否定图像中的颜色意味着颜色的反转或反转。 例如,假设图像包含白色和黑色。 取消颜色后,白色变为黑色,黑色变为白色。

'negateImage()' 函数用于对 PHP ImageMagick 中的颜色取反/反转,

您还可以使用此效果通过将浅色调更改为深色或将深色调更改为明亮色调来创建高对比度图像。 此外,通过应用部分色彩否定,可以在图像中实现更微妙的色彩变化; 这意味着只有图像的某些部分受到影响,而其他部分则保持不变。

语法

public Imagick::negateImage(bool $gray, int $channel =Imagick::CHANNEL_DEFAULT): bool

该函数接受 2 个参数:灰度和通道。

  • Gray 是一个布尔值,决定是否取消图像中的灰度像素。

  • Channel 提供对您的通道模式有效的任何通道常量。

要应用多个通道,您必须使用按位运算符组合 channelType 常量。

示例

通过下面的例子,您可以清楚地了解'negateImage()'函数的实现。 首先,创建一个新的 imagick 对象并输入图像。 然后在图像上应用'negateImage()'函数,并在'writeImage()'函数的帮助下显示输出图像。

<?php
   $image=new Imagick($_SERVER['DOCUMENT_ROOT']."/test/image.png");
   $image->negateImage('true');
   $image->writeImage($_SERVER['DOCUMENT_ROOT']."/test/negateImage.png");
?>

假设以下是程序中的输入图像(image.png)−

否定图像

输出

否定图像