PHP Conference Japan 2024

imagecolormatch

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

imagecolormatch使影像調色盤版本的顏色與真彩色版本更接近

說明

imagecolormatch(GdImage $image1, GdImage $image2): bool

使影像調色盤版本的顏色與真彩色版本更接近。

參數

image1

一個真彩色影像物件。

image2

一個調色盤影像物件,指向與 image1 大小相同的影像。

返回值

成功時返回 true, 失敗時返回 false

更新日誌

版本 說明
8.0.0 現在 image1image2 預期是 GdImage 的實例;先前預期的是 resource

範例

範例 #1 imagecolormatch() 範例

<?php
// 設定真彩色和調色板圖像
$im1 = imagecreatefrompng('./gdlogo.png');
$im2 = imagecreate(imagesx($im1), imagesy($im1));

// 為 $im2 添加一些顏色
$colors = Array();
$colors[] = imagecolorallocate($im2, 255, 36, 74);
$colors[] = imagecolorallocate($im2, 40, 0, 240);
$colors[] = imagecolorallocate($im2, 82, 100, 255);
$colors[] = imagecolorallocate($im2, 84, 63, 44);

// 將這些顏色與真彩色圖像匹配
imagecolormatch($im1, $im2);

// 從記憶體中釋放
imagedestroy($im1);
imagedestroy($im2);
?>

另請參閱

新增註解

使用者貢獻的註解 3 則註解

gk at karko dot net
14 年前
使用 Ubuntu 伺服器的用戶請注意,此函式是在 PHP 的 GD 函式庫分支中新增的,在 Ubuntu php5-gd 套件中預設不提供。

以下是安裝 PHP GD 版本的方法: http://preview.tinyurl.com/yel4r7t
albriNOght at anSPAMre dot net
18 年前
這個函數似乎是透過更改調色板圖像的顏色值來運作的——如果您試圖強制生成的圖像堅持某些預定義的顏色值,那麼這就不好用了。
Samantha
20 年前
這個函數簡直是天賜!它的運作方式與文件所述完全一致。

我正在開發一個應用程式,需要取得一個透明 GIF,將 GIF 疊加在使用者定義的背景顏色上,最後根據使用者定義的百分比縮放 GIF。

我讓它產生高品質最終圖像(例如:無鋸齒邊緣和平滑縮放)的唯一方法,是將 GIF 轉換為 JPG,然後像這樣將 JPG 複製到新的 GIF 圖像中:

// 開啟透明 gif
$GIFimg = imagecreatefromgif($file_path);

// 建立 jpg 圖像
$JPGimg = imagecreatetruecolor($width, $height);

// 將 GIF 複製到 JPG
imagecopy($JPGimg, $GIFimg, 0, 0, 0, 0, $width, $height);

// 建立真彩色圖像
$JPGscaled = imagecreatetruecolor($n_width, $n_height);

// 使用真彩色圖像縮放新的 JPG
imagecopyresampled($JPGscaled, $JPGimg, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// 建立最終的 GIF 圖像
$GIFfinal = imagecreate($n_width, $n_height);

// 將縮放後的 JPG 複製回 GIF
imagecopymerge($GIFfinal, $JPGscaled, 0, 0, 0, 0, $n_width, $n_height, 100);

除了最後一步(將 JPG 複製到 GIF)之外,其他步驟都運作良好。如果 JPG 的顏色過多,該函數會將顏色索引化以使其成為調色板圖像。因此,最終圖像會包含錯誤的顏色。

在程式碼底部新增這一行程式碼就解決了所有問題。

imagecolormatch($JPGscaled, $GIFfinal);

我希望這能幫助任何在圖像格式之間來回轉換並處理調色板問題和色彩校正的人。另外,請注意,以上程式碼只是一個範例,複製貼上並不能直接使用。
To Top