4

给定一个图像文件,将其转换为老式 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()电话是倒退的,但修复它也无济于事。请参阅下面的评论。

4

1 回答 1

1

是否改变
imagepalettecopy($palette, $image);
进入
imagepalettecopy($image, $palette);
工作?

编辑:

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

在此处输入图像描述

我觉得这些颜色和你的不一样。(我从图片中手工挑选了果岭......)

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

<?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);
?>

这是我的结果:

在此处输入图像描述

请告诉我我是否应该删除图片?!

于 2013-05-15T07:52:47.060 回答