我一直试图用Go在二进制模式下打开图像。在Python中,我使用Pillow和image.open()(rb模式)。实施例。
__getattr__
这将打开图像,其中包含非常干净的白色和黑色二进制点,如下图所示。 我已经尝试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 ==黑色)进行比较...它仍然不匹配甚至不匹配。示例
请帮助。我没有想法。 PS。此网站http://www.dcode.fr/binary-image也会打开图片并生成我期待的数据。
的图片答案 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())
}