为了账号安全,请及时绑定邮箱和手机立即绑定

检查png图像在戈朗中是否全部透明

检查png图像在戈朗中是否全部透明

Go
翻阅古今 2022-09-19 17:45:27
我有多个像这样的网址,总是返回PNG图像。https://hydro.nationalmap.gov/arcgis/rest/services/wbd/MapServer/export?bbox=-106.6462299999999885,25.83722399999999908,-93.50780600000010168,36.50038700000000347&size=640,519&bboxSR=4326&layers=show:4&f=image&transparent=true我想检查从URL返回的图像是否像上面的URL一样都是空的(透明的),或者它里面有一些实际的图像。我通过以下函数发出请求,并检查HTTP状态是否为200,返回的内容类型是否为图像。我需要在此处添加功能以测试图像是否为空。thumbnail := "https://hydro.nationalmap.gov/arcgis/rest/services/wbd/MapServer/export?bbox=-106.6462299999999885,25.83722399999999908,-93.50780600000010168,36.50038700000000347&size=640,519&bboxSR=4326&layers=show:4&f=image&transparent=true"resp, err := client.Get(thumbnail)if err != nil {    fmt.Println(err)} else if resp.StatusCode == 200 && strings.HasPrefix(resp.Header["Content-Type"][0], "image") {    return thumbnail} else {    fmt.Println(thumbnail, resp.StatusCode, resp.Header["Content-Type"][0])}
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

标准库提供了功能强大的软件包和解码器,使我们能够非常轻松地做到这一点。imageimage/png


我们知道透明度意味着 alpha=0,我们需要做的就是迭代图像的像素。


package main


import (

    "image/png"

    "io"

    "log"

    "net/http"

)


func main() {

    transparentResp, _ := http.Get("https://upload.wikimedia.org/wikipedia/commons/3/3d/1_120_transparent.png")

    defer transparentResp.Body.Close()

    notTransparentResp, _ := http.Get("https://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Pitch.png/640px-Pitch.png")

    defer notTransparentResp.Body.Close()

    println(isFullyTransparentPng(transparentResp.Body))

    println(isFullyTransparentPng(notTransparentResp.Body))

}


func isFullyTransparentPng(reader io.Reader) bool {

    img, _ := png.Decode(reader)

    for x := img.Bounds().Min.X; x < img.Bounds().Dx(); x++ {

        for y := img.Bounds().Min.Y; y < img.Bounds().Dy(); y++ {

            _, _, _, alpha := img.At(x, y).RGBA()

            if alpha != 0 {

                return false

            }

        }

    }

    return true

}


查看完整回答
反对 回复 2022-09-19
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信