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
廣告

© . All rights reserved.