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(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
imagecolormatch β ΠΡΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ ΡΠ²Π΅ΡΠ° ΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊ truecolor-Π²Π΅ΡΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ΄Π³ΠΎΠ½ΡΠ΅Ρ ΡΠ²Π΅ΡΠ° ΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊ truecolor-Π²Π΅ΡΡΠΈΠΈ
image1ΠΠ±ΡΠ΅ΠΊΡ truecolor-ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
image2
ΠΠ±ΡΠ΅ΠΊΡ ΠΏΠ°Π»ΠΈΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ,
ΡΡΠΎ ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ image1.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true.
| ΠΠ΅ΡΡΠΈΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| 8.0.0 |
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ image1 ΠΈ image2 ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ
ΠΊΠ»Π°ΡΡΠ° 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);
// ΠΠ°Π΄Π°ΡΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠ²Π΅ΡΠΎΠ² truecolor-ΡΠ²Π΅ΡΠ°ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
imagecolormatch($im1, $im2);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/yel4r7tThis 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.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.