文字

imagecolormatch

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

imagecolormatch使一个图像中调色板版本的颜色与真彩色版本更能匹配

说明

bool imagecolormatch ( resource $image1 , resource $image2 )

使一个图像中调色板版本的颜色与真彩色版本更能匹配。

参数

image1

真彩色图像连接资源。

image2

必须是调色板图像,而且和 image1 的大小必须相同。

返回值

成功时返回 TRUE , 或者在失败时返回 FALSE

范例

Example #1 imagecolormatch() 例子

<?php
// Setup the true color and palette images
$im1  imagecreatefrompng ( './gdlogo.png' );
$im2  imagecreate ( imagesx ( $im1 ),  imagesy ( $im1 ));

// Add some colors to $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 );

// Match these colors with the true color image
imagecolormatch ( $im1 $im2 );

// Free from memory
imagedestroy ( $im1 );
imagedestroy ( $im2 );
?>

注释

Note: 此函数仅在与 GD 库捆绑编译的 PHP 版本中可用。

Note: 此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。

参见

  • imagecreatetruecolor() - 新建一个真彩色图像

用户评论:

[#1] gk at karko dot net [2010-06-28 09:42:11]

Those that have Ubuntu servers note, that this function is added in PHP's GD library fork and is not available by default in Ubuntu php5-gd package.

Here's how-to install the PHP GD version: http://preview.tinyurl.com/yel4r7t

[#2] albriNOght at anSPAMre dot net [2005-12-12 09:22:15]

This function appears to work by changing the values of the colors of the paletted image -- no good if you're trying to force the resultant image to stick with certain pre-defined color values.

[#3] Samantha [2004-02-08 19:14:41]

This function is a godsend! It works exactly as documented.

I'm working on an application where I need to take a transparent GIF, matte the GIF on a user defined background color, and finally scale the GIF based on a user defined %.

The only way I could get this to work so that the final image was high quality, ie: no jagged edges, and a smooth scale, was to convert the GIF to a JPG, and then copy the JPG into a new GIF image like this:

// open transparent gif
$GIFimg = imagecreatefromgif($file_path);

// create jpg image
$JPGimg = imagecreatetruecolor($width, $height);

// copy GIF to JPG
imagecopy($JPGimg, $GIFimg, 0, 0, 0, 0, $width, $height); 

// create a true color image
$JPGscaled = imagecreatetruecolor($n_width, $n_height);

// scale the new JPG using the truecolor image
imagecopyresampled($JPGscaled, $JPGimg, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// create final GIF image
$GIFfinal = imagecreate($n_width, $n_height);

// copy the scaled JPG back to a GIF
imagecopymerge($GIFfinal, $JPGscaled, 0, 0, 0, 0, $n_width, $n_height, 100);

This worked great except the final step, copying the JPG to a GIF. If the JPG had too many colors, the function would index the colors to make it a palette image. So what would end up happening is the final image contained INCORRECT colors.

Adding this one line at the bottom of the code fixed everything.

imagecolormatch($JPGscaled, $GIFfinal);

I hope this helps anyone who is converting images back and forth and dealing with palette issues and color correction. Also, be aware that the above code is a sample and will not work by copying and pasting.

上一篇: 下一篇: