PHP ImageMagick - 修改颜色



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

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

着色图像

ImageMagick 的 'colorizeImage()' 函数是更改图像任何部分颜色的有效方法。此函数通过将选定的填充颜色与图片中的每个像素混合来工作,在颜色之间创建平滑的过渡,并产生专业的效果。

  • 此过程消除了与更改图像上的颜色相关的大部分手动操作,例如选择特定区域或手工绘制部分。

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

语法

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

此函数接受 2 个参数 - **colorize** 和 **opacity。**

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

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

如果 opacity 为 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)如下所示:

Colorize Image

输出

Colorize Image

创建蓝色偏移图像

当需要在月光下或夜间表示图像时,您可以使用 **‘blueShiftImage()’** 方法来实现。此方法将图像作为参数,并使图像的颜色变暗以模拟月光下的夜间场景,并生成输出图像。

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

  • 此外,此技术可用于创意目的;通过操作颜色值,可以使用黄昏时拍摄的照片或甚至在人造照明条件下的室内照片来实现有趣的效果。

语法

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

此函数以因子值作为其参数。它指定使图像颜色变暗的值。

示例

此示例显示了 **‘blueShiftImage()’** 函数的实现。创建一个新的 imagick 对象并以图像作为输入。现在,应用 **‘blueShiftImage()’** 函数并将因子作为其参数,得到的输出图像为 '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)如下所示:

Creating Blue Shift Image

输出

Creating Blue Shift Image

替换图像中的颜色

在本节中,您将学习如何替换图像中的颜色。ImageMagick 中有一个名为 **‘clutImage()’** 的内置函数可以执行此任务。借助此函数,图像中的所有颜色都将替换为用户需要的特定颜色。此函数以图像作为输入,并生成替换颜色后的图像作为输出。

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

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

语法

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

此函数接受 2 个参数。

  • lookup_table,它是包含颜色查找表的 Imagick 对象

  • channel,它是 Channeltype 常量。

示例

在下面的示例中,创建了一个 <>bImagick 对象,并以图像作为其输入。然后创建一个第二个 Imagick 对象并生成一个新图像,该图像从查找表中选择“紫色”。**`clutImage()`** 方法用于替换颜色,其中已指定“紫色”,并且没有声明 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)如下所示:

Replacing Colors Images

输出

Replacing Colors Images

图像取反

对图像中的颜色取反意味着反转或颠倒颜色。例如,假设一个图像包含白色和黑色。取反颜色后,白色变为黑色,黑色变为白色。

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

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

语法

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

此函数接受 2 个参数:gray 和 channel。

  • 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)如下所示:

Negation Images

输出

Negation Images
广告