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