【问题标题】:How to use PHP GD to create 1 bit bitmaps (black and white only, no gray)如何使用 PHP GD 创建 1 位位图(只有黑白,没有灰色)
【发布时间】:2015-09-29 07:19:43
【问题描述】:

我的目标

我有一个现有的 PNG。它目前具有抗锯齿功能,或者换句话说,具有灰色阴影。我希望图像是 1 位,或者换句话说,只使用黑色和白色。我的目标是用 PHP GD 做到这一点。我必须对现有图像执行此操作,并且无法使用 imagecreatetruecolor 从头开始​​创建图像。

我正在尝试什么

我发现最适合这项工作的功能是 imagetruecolortopalette http://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 是最好的选择,但欢迎任何和所有想法。

【问题讨论】:

  • 不,因为这是从头开始创建 1 位位图的方法,我需要对现有图像执行此操作。我会改变我的问题来澄清这一点。
  • 对于 1 位图像,最大。颜色的数量应该是 2。1 色图像是一个扁平的颜色块。
  • 我没有得到一个平面色块,我得到了原始图像,所以要么我没有正确使用 GD,要么这不是正确的功能。我不确定是哪个。我认为我无法使用 GD 文件之类的资源,而 GD 只接受字符串并且只能从头开始创建图像。任何有关这方面的知识将不胜感激。

标签: php image-processing bitmap image-manipulation php-gd


【解决方案1】:
$im = imagecreatefromstring($user_design);
imagefilter($im, IMG_FILTER_GRAYSCALE);
imagefilter($im, IMG_FILTER_CONTRAST, -1000);
imagepng($im, 'path/filename.png');
imagedestroy($im);

How do you convert an image to black and white in PHP

【讨论】:

  • 这可行,但是,根据您链接的问题中的 cmets,我必须将其更改为 imagefilter($im, IMG_FILTER_CONTRAST, -1000);-1000 而不是 -100
  • 此外,即使我注释掉IMG_FILTER_GRAYSCALEIMG_FILTER_CONTRAST,它也会使背景(或者路径元素上的文本)变黑。但是,这是一个单独的问题,您的回答完成了我的要求。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
相关资源
最近更新 更多