如何使用PHP或Ruby从图像中删除某些颜色?

说有3个圆圈:红色,蓝色,黑色。

我只想留下黑色圆圈。 如何删除红色和蓝色圆圈?

因为您已经要求PHP解决方案:

  • 首先使用imagecreatefrompng或其他图像格式的类似function加载图片
  • 然后,使用imagesx和imagesy来获取图像的大小。
  • 现在,您可以通过所有像素循环

    for ($i = 0; $i < $imageWidth; $i++) { for ($j = 0; $j < $imageHeight; $j++) { // check color and replace } } 
  • 最后,使用imagecolorat获取颜色(检查它是否在特定范围内 ,不要只将黑色作为好颜色,而是在红色,绿色和蓝色的每个值上都具有> = 250的所有颜色)

  • ...和imagecolorset设置颜色
  • 现在您可以使用imagepng保存图像。

ImageMagick会这样做。 刚刚发出这个命令:

 convert circles.png -channel black -white-threshold 10% circles2.png 

你没有说明如何处理绿色。 这个脚本可以轻松解决问题并消除绿色。 实际上,它消除了任何不是黑色的东西。

RMagick库可以让你用Ruby驱动imagemagick。 可悲的是,它不适用于我的发行版,所以我无法为你准备一个例子。 但是,使用系统或反引号来命令命令工作正常。

如果您知道正在使用的图像格式,您可能会使用该信息来避免通过像素值访问(可能会破坏图像质量),否则请执行与此类似的操作:

  1. 将图像保持为像素数组
  2. 映射每个像素,如果它位于距您要删除的任何颜色的某个阈值步骤内,则将其设置为背景颜色。

这取决于在任何时候都可以设置像素的给定背景颜色,并且您可以识别要移除的颜色。