将图像转换为预定义的16种颜色

时间:2013-05-15 07:36:23

标签: php colors gd

鉴于图像文件,将它转换为旧学校16种颜色的最佳方法是什么?即白色,橙色,洋红色,浅蓝色,黄色,石灰色,粉色,灰色,浅灰色,青色,紫色,蓝色,棕色,绿色,红色和黑色。

我制作了一个1x16像素的小图像,其中包含了我可以用作源调色板的所有16种颜色(对吗?)但是我在使用它时遇到了麻烦。似乎imagepalettecopy()是我想要的(采用16像素数据图像的调色板并将其复制到新图像上)但我提出的代码不起作用:

<?php

$palette = imagecreatefrompng( __DIR__ . '/palette.png' );

$source = imagecreatefromjpeg( __DIR__ . '/testimage.jpg' );

$source_w = imagesx( $source );
$source_h = imagesy( $source );

$image = imagecreate( $source_w, $source_h );

imagepalettecopy( $palette, $image );

imagecopy( $image, $source, 0, 0, 0, 0, $source_w, $source_h );

header('Content-Type: image/png');
imagepng( $image );

它似乎只是将它转换为16种颜色的选择或其他东西(我不太确定)。

我错过了什么或做错了什么?

编辑:我的imagepalettecopy()电话是倒退的,但修复它也无济于事。见下面的评论。

1 个答案:

答案 0 :(得分:1)

更改
imagepalettecopy($ palette,$ image);

imagepalettecopy($ image,$ palette);
工作?

修改

我尝试使用以下调色板作为gif:

enter image description here

我认为这些颜色与你的颜色不同。 (我从图片中挑选了果岭......)

这是我尝试过的代码(这里没有什么区别):

<?php

$palette = imagecreatefromgif('palette-gif-03.gif');

$source = imagecreatefromjpeg('test-image-01.jpg');

$source_w = imagesx($source);
$source_h = imagesy($source);

$image = imagecreate($source_w, $source_h);

imagepalettecopy($image, $palette);

imagecopy($image, $source, 0, 0, 0, 0, $source_w, $source_h);

header('Content-Type: image/png');
imagepng($image);

imagedestroy($imgage);
imagedestroy($palette);
imagedestroy($source);
?>

这是我的结果:

enter image description here

如果我要删除图片,请告诉我?!!