如何使用PHP GD创建1位的位图(只有黑白,没有灰色)


image processing - How to use PHP GD to create 1 bit bitmaps (black and white only, no gray)

我的目标

我有一个现有的PNG。它目前具有抗混叠,换句话说,灰度。我希望图像是1位,换句话说,只使用黑白两种颜色。我的目标是用PHP GD做到这一点。我必须对现有的图像进行此操作,并且不能使用imagecreatetruecolor从头创建图像。

我在尝试什么

我发现最适合这项工作的功能是imagetruecolortopalettehttp://php.net/manual/en/function.imagetruecolortopalette.php

这是我要做的一个简单版本

$user_design = base64_decode($_POST['input']);
$design_file = fopen('path/filename.png', 'w') or die("Unable to open file!");
imagetruecolortopalette($design_file, false, 1);
fwrite($design_file, $user_design);
fclose($design_file);

这是关键行。1是"应该在调色板中保留的最大颜色数量"。

imagetruecolortopalette($design_file, false, 1);

行为我得到

图像看起来没有改变。我不确定我是否正确使用PHP GD,或者如果这个函数不做我认为它做的事情。

其他想法

这些看起来也很有希望。

imagecolordeallocate似乎我可以使用它来释放颜色,但不确定如何做到这一点,而不调用它254次。

http://php.net/manual/en/function.imagecolordeallocate.php

imagecolorset似乎我可以使用它来设置调色板,但我不确定如何为现有的图像做到这一点。

http://php.net/manual/en/function.imagecolorset.php

大多数情况下,我认为imagetruecolortopallette是最好的选择,但欢迎任何想法。

$im = imagecreatefromstring($user_design);
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, -1000);
imagepng($im, 'path/filename.png');
imagedestroy($im);

如何在PHP中将图像转换为黑白