【问题标题】:Extracting certain parts on image with PHP使用 PHP 提取图像上的某些部分
【发布时间】:2018-04-27 09:53:09
【问题描述】:

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

这是一个 gif 的示例:

数据颜色会根据右侧的数据图例而有所不同。我还希望国家边界不可见,因为 gif 按顺序淹没:基础层、雷达数据层、边界层 - 我只需要纯雷达数据。

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

【问题讨论】:

  • 请显示结果的样子。
  • 对不起,我已经不在办公室了。感谢您的大力帮助,我刚刚检查了答案!

标签: php image image-processing imagemagick gif


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    首先,如果您只对我们在 gif 的某些特定帧中呈现的由颜色编码的信息感兴趣,请在此处阅读有关如何仅访问该 gif 帧的信息:

    Accessing gif frames

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

    【讨论】:

      【解决方案3】:

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

      convert radar.gif \
         \( +clone -colorspace hsl -channel S -separate -threshold 85% \) \
           -compose copyopacity -composite 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)" 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
      

      【讨论】:

      • 这太棒了!天呐!我想这是 ImageMagick,我想让自己的东西更接近并使用纯 PHP,但我想我将不得不检查 IM,因为我还没有用 PHP 弄清楚任何事情。但我想在这里做的是删除这个最后变成蓝色的边框,如果可以在过去边框的地方插入颜色,现在这个区域是白色的。
      • 您可以像删除淡紫色和黄色一样删除边框。只需获取其 RGB 颜色并将另一个 -opaque "rgb(0,89,129)" 添加到列表中即可。
      • 您可以将 ImageMagick 与 PHP 一起使用 - 只需在 StackOverflow 上搜索 [imagick]
      猜你喜欢
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多