我的目标
我有一个现有的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.phpimagecolorset似乎我可以使用它来设置调色板,但我不确定如何为现有的图像做到这一点。
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中将图像转换为黑白