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 个注释

2
gk at karko dot net
14 年前
使用 Ubuntu 服务器的用户请注意,此函数是在 PHP 的 GD 库分支中添加的,默认情况下在 Ubuntu php5-gd 包中不可用。

以下是安装 PHP GD 版本的方法:http://preview.tinyurl.com/yel4r7t
1
albriNOght at anSPAMre dot net
18 年前
此函数似乎通过更改调色板图像的颜色值来工作——如果您试图强制最终图像使用某些预定义的颜色值,这将不起作用。
0
Samantha
20 年前
这个函数真是个救星!它完全按照文档中描述的那样工作。

我正在开发一个应用程序,需要将透明的 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