如何在Go中打开图像以获取黑白像素的二进制数据?

时间:2017-06-11 21:20:56

标签: image go binary

我一直试图用Go在二进制模式下打开图像。在Python中,我使用Pillow和image.open()(rb模式)。实施例。

__getattr__

这将打开图像,其中包含非常干净的白色和黑色二进制点,如下图所示。 Example我已经尝试img = Image.open("PNG.png") pix = img.getdata() #where 0 is black and 1 is white pixel 打开文件..我已尝试使用os.Open(file.jpg)对其进行解码,我已将文件加载到{{} 1}},我已经尝试image.Decode(),所有解决方案都提供了一个字节数组。将该字节数组转换为二进制文件与上图不同。我也尝试了bytes.Buffer和同样的故事只是获取字节而生成的二进制文件并不是我想要的......

最近我试过这个

fmt.Sprintf("%b", data)

因此,我可以将二进制文件与我期望的将rgba转换为1和0s(其中0 ==黑色)进行比较...它仍然不匹配甚至不匹配。示例enter image description here

请帮助。我没有想法。 PS。此网站http://www.dcode.fr/binary-image也会打开图片并生成我期待的数据。

更新 这是我正在使用.. Image to decode

的图片

1 个答案:

答案 0 :(得分:2)

例如,

package main

import (
    "bytes"
    "fmt"
    "image"
    "os"

    _ "image/jpeg"
)

func main() {
    fName := "ggk3Z.jpg"
    f, err := os.Open(fName)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    defer f.Close()
    img, _, err := image.Decode(f)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }

    // http://www.dcode.fr/binary-image
    var txt bytes.Buffer
    bounds := img.Bounds()
    for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
        for x := bounds.Min.X; x < bounds.Max.X; x++ {
            r, g, b, _ := img.At(x, y).RGBA()
            bin := "0"
            if float64((r+g+b))/3 > 0.5 {
                bin = "1"
            }
            txt.WriteString(bin)
        }
        txt.WriteString("\n")
    }
    fmt.Fprint(os.Stdout, txt.String())
}