From 4c49a3659cb56369865d431c32f45cc18a123276 Mon Sep 17 00:00:00 2001 From: Florian Date: Fri, 26 Jan 2018 14:09:49 +0100 Subject: [PATCH] Created Content String (markdown) --- Content-String.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Content-String.md diff --git a/Content-String.md b/Content-String.md new file mode 100644 index 0000000..b087f38 --- /dev/null +++ b/Content-String.md @@ -0,0 +1,73 @@ +To add the content of the barcode to an image below the barcode you can use and extend the following sample code: + +```golang +package main + +import ( + "image" + "image/color" + "image/draw" + "image/png" + "os" + + "github.com/boombuler/barcode" + "github.com/boombuler/barcode/code128" + "golang.org/x/image/font" + "golang.org/x/image/font/basicfont" + "golang.org/x/image/math/fixed" +) + +func subtitleBarcode(bc barcode.Barcode) image.Image { + fontFace := basicfont.Face7x13 + fontColor := color.RGBA{0, 0, 0, 255} + margin := 5 // Space between barcode and text + + // Get the bounds of the string + bounds, _ := font.BoundString(fontFace, bc.Content()) + + widthTxt := int((bounds.Max.X - bounds.Min.X) / 64) + heightTxt := int((bounds.Max.Y - bounds.Min.Y) / 64) + + // calc width and height + width := widthTxt + if bc.Bounds().Dx() > width { + width = bc.Bounds().Dx() + } + height := heightTxt + bc.Bounds().Dy() + margin + + // create result img + img := image.NewRGBA(image.Rect(0, 0, width, height)) + // draw the barcode + draw.Draw(img, image.Rect(0, 0, bc.Bounds().Dx(), bc.Bounds().Dy()), bc, bc.Bounds().Min, draw.Over) + + // TextPt + offsetY := bc.Bounds().Dy() + margin - int(bounds.Min.Y/64) + offsetX := (width - widthTxt) / 2 + + point := fixed.Point26_6{ + X: fixed.Int26_6(offsetX * 64), + Y: fixed.Int26_6(offsetY * 64), + } + + d := &font.Drawer{ + Dst: img, + Src: image.NewUniform(fontColor), + Face: fontFace, + Dot: point, + } + d.DrawString(bc.Content()) + return img +} + +func main() { + content := "My fancy Barcode" + bcImg, _ := code128.Encode(content) + scaled, _ := barcode.Scale(bcImg, bcImg.Bounds().Dx(), 80) + + img := subtitleBarcode(scaled) + + f, _ := os.Create("barcode.png") + defer f.Close() + png.Encode(f, img) +} +``` \ No newline at end of file