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

戈朗叠加图像始终为黑白

戈朗叠加图像始终为黑白

Go
RISEBY 2022-09-26 17:47:00
我正在尝试在二维码(图像)上叠加。问题是我的原始叠加图像是彩色的,但最终结果是黑白的。代码如下:func (e Encoder) Encode(str string, logo image.Image, size int) (*bytes.Buffer, error) {    var buf bytes.Buffer    code, err := qr.New(str, e.QRLevel)    if err != nil {        return nil, err    }    img := code.Image(size)    e.overlayLogo(img, logo)    err = png.Encode(&buf, img)    if err != nil {        return nil, err    }    return &buf, nil}func (e Encoder) overlayLogo(dst, src image.Image) {    offset := dst.Bounds().Max.X/2 - src.Bounds().Max.X/2    yOffset := dst.Bounds().Max.Y/2 - src.Bounds().Max.Y/2    draw.Draw(dst.(draw.Image), dst.Bounds().Add(image.Pt(offset, yOffset)), src, image.Point{}, draw.Over)}有人可以在这里帮助我吗?这是我得到的最后一张图片使用的图像
查看完整描述

2 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

QR码图像使用2种颜色,使其更易于扫描/识别。您正在使用的库 github.com/skip2/go-qrcode 创建仅使用 2 种颜色(默认为黑色和白色)的调色板图像。您可以检查您正在调用的QRCode.Image()方法的源代码,来源如下

p := color.Palette([]color.Color{q.BackgroundColor, q.ForegroundColor})
img := image.NewPaletted(rect, p)

这意味着无论您在此类图像上绘制什么,每个像素的颜色都将从这个2尺寸的调色板中选择(背面或白色)。绘制的图像的颜色信息将丢失。

如果要保留所有颜色,则必须创建一个支持所有(或至少是使用过的)颜色的图像,在该图像上绘制QR码图像,然后进行叠加。


查看完整回答
反对 回复 2022-09-26
?
郎朗坤

TA贡献1921条经验 获得超9个赞

我的工作也需要它。因此,从@icza我总结一下:-


resultImg := image.NewRGBA(qrImg.Bounds())

overlayLogo(resultImg, qrImg)

overlayLogo(resultImg, logo)

因此,我们得到了结果Img,带有徽标的QR码。


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

添加回答

举报

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