使用PHP在图像上提取某些部分

时间:2017-11-14 12:30:10

标签: php image image-processing imagemagick gif

我希望能够每小时从gif中提取雷达数据。

这是一个gif的示例: enter image description here

数据颜色可能因右侧的数据图例而异。我也希望国家边界不可见,因为gif按顺序淹没:基础层,雷达数据层,边界层 - 我只需要纯粹的雷达数据。

任何建议或解决方案都会非常受欢迎!

3 个答案:

答案 0 :(得分:1)

所有雷达数据似乎都是高度饱和的,因此您可以将饱和度提取到自己的图层上并将其阈值设置为85%,并将其用作不透明度,如下所示:

convert radar.gif \
   \( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
     -compose copyopacity -composite result.gif

为您提供了这一点,其中所有不饱和颜色现在都是透明的:

enter image description here

正如您所看到的,它正确地拾取并保留右侧“键”中的所有颜色,但它也会拾取图像左侧的紫红色。让这个特定的语气透明:

convert radar.gif \
   \( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
      -compose copyopacity -composite                               \
      -fuzz 10% -fill none -opaque "rgb(160,153,255)" result.gif

给出了这个:

enter image description here

现在,我认为我们也需要摆脱病态的黄色:

convert radar.gif \
  \( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
     -compose copyopacity -composite                               \
     -fuzz 10% -fill none                                          \
     -opaque "rgb(160,153,255)"                                    \
     -opaque "rgb(254,251,175)" result.gif

最后,让我们裁剪到左上角480x480 px:

convert radar.gif -crop 480x480+0+0 +repage \
  \( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
     -compose copyopacity -composite                               \
     -fuzz 10% -fill none                                          \
     -opaque "rgb(160,153,255)"                                    \
     -opaque "rgb(254,251,175)" result.gif

enter image description here

答案 1 :(得分:0)

您可以使用' imagecreatefromgif'检索gif并将其作为GD对象加载(需要在php.ini中启用GD)。从那里你可以使用相当多的图像处理技巧来减少你想要的gif。 PHP.net网站上有一个关于你可以用它做什么的例子。

答案 2 :(得分:0)

首先,如果您只对颜色编码的信息感兴趣,我们在gif的某个特定帧中提供这些信息,请在此处阅读有关如何只访问一个帧的信息:

Accessing gif frames

之后,考虑到你有一个矩形图像,你可以使用php函数' imagecolorat'逐像素地扫描像素。