问题背景
一些打印机需要的都是1bit color bmp图片,但是golang中没有直接的办法,官方image库最低bpp为8,打印机无法使用。
在github上找到了很多资源,都没有直接能转的,突然看到一个老外,可以支持plattered图片转位1bit color bmp图片,然后自己先把图片转位plattered黑白图片,继续使用该黑白图片转位1bit color bmp,果断写了一段测试代码,没想到直接成功了。
这样打印机就能直接用了。从而实现程序自动化打印。
解决方法
package main
import (
"bufio"
"github.com/sergeymakinen/go-bmp"
"image"
"image/color"
"image/draw"
_ "image/jpeg"
_ "image/png"
"os"
)
func main() {
// 解码PNG图像
file, err := os.Open("./logo.png")
if err != nil {
panic(err)
}
//img, _, err := image.Decode(file)
//if err != nil {
// panic(err)
//}
// 解码图像
src, _, err := image.Decode(bufio.NewReader(file))
if err != nil {
panic(err)
}
bounds := src.Bounds()
palette := []color.Color{color.White, color.Black}
dst := image.NewPaletted(bounds, palette)
// 将src图像转换为Paletted图像
draw.Draw(dst, bounds, src, image.ZP, draw.Src)
// 打开一个BMP文件用于写入
outFile, err := os.Create("output.bmp")
if err != nil {
panic(err)
}
defer outFile.Close()
// 使用BMP编码器将图像编码为BMP格式并写入文件
err = bmp.Encode(outFile, dst)
if err != nil {
panic(err)
}
}