戈朗叠加图像始终为黑白

我正在尝试在二维码(图像)上叠加。问题是我的原始叠加图像是彩色的,但最终结果是黑白的。代码如下:


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)

}

有人可以在这里帮助我吗?这是我得到的最后一张图片


使用的图像


RISEBY
浏览 64回答 2
2回答

慕慕森

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码图像,然后进行叠加。

郎朗坤

我的工作也需要它。因此,从@icza我总结一下:-resultImg := image.NewRGBA(qrImg.Bounds())overlayLogo(resultImg, qrImg)overlayLogo(resultImg, logo)因此,我们得到了结果Img,带有徽标的QR码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go