使用 PHP 提取图像上的某些部分
Extracting certain parts on image with PHP
我希望能够从每小时出现的 gif 中提取雷达数据。
这是一张 gif 的示例:
数据颜色可能会根据右侧的数据图例而有所不同。我还希望国家边界不可见,因为 gif 按顺序淹没:基础层、雷达数据层、边界层 - 我只需要纯雷达数据。
非常感谢任何建议或解决方案!
您可以使用“imagecreatefromgif”检索 gif 并将其作为 GD 对象加载(需要在 php.ini 中启用 GD)。从那里你可以使用相当多的图像处理技巧来减少你想要的 gif。 PHP.net 站点有一个示例,说明您可以使用它做什么。
首先,如果您只对我们在 gif 的某个特定帧中显示的颜色编码的信息感兴趣,请阅读此处了解如何仅访问该 gif 中的一个帧:
Accessing gif frames
之后,考虑到您有一个矩形图像,您可以使用 php 函数 'imagecolorat'.
逐像素扫描,作为矩阵
所有雷达数据似乎都高度饱和,因此您可以将饱和度提取到它自己的图层上并将其阈值设置为 85%,然后将其用作不透明度,如下所示:
convert radar.gif \
\( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
-compose copyopacity -composite result.gif
给你这个,所有不饱和的颜色现在都是透明的:
如您所见,它正确地拾取并保留了右侧 "key" 中的所有颜色,但它也拾取了图像左侧的紫红色。让我们让特定的语气变得透明:
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
这给出了这个:
现在,我想我们也需要摆脱病态的黄色:
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 像素:
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
我希望能够从每小时出现的 gif 中提取雷达数据。
这是一张 gif 的示例:
数据颜色可能会根据右侧的数据图例而有所不同。我还希望国家边界不可见,因为 gif 按顺序淹没:基础层、雷达数据层、边界层 - 我只需要纯雷达数据。
非常感谢任何建议或解决方案!
您可以使用“imagecreatefromgif”检索 gif 并将其作为 GD 对象加载(需要在 php.ini 中启用 GD)。从那里你可以使用相当多的图像处理技巧来减少你想要的 gif。 PHP.net 站点有一个示例,说明您可以使用它做什么。
首先,如果您只对我们在 gif 的某个特定帧中显示的颜色编码的信息感兴趣,请阅读此处了解如何仅访问该 gif 中的一个帧:
Accessing gif frames
之后,考虑到您有一个矩形图像,您可以使用 php 函数 'imagecolorat'.
逐像素扫描,作为矩阵所有雷达数据似乎都高度饱和,因此您可以将饱和度提取到它自己的图层上并将其阈值设置为 85%,然后将其用作不透明度,如下所示:
convert radar.gif \
\( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
-compose copyopacity -composite result.gif
给你这个,所有不饱和的颜色现在都是透明的:
如您所见,它正确地拾取并保留了右侧 "key" 中的所有颜色,但它也拾取了图像左侧的紫红色。让我们让特定的语气变得透明:
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
这给出了这个:
现在,我想我们也需要摆脱病态的黄色:
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 像素:
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