golang,绘图包image

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
package main

import (
   "os"
   "image"
   "image/color"
   "image/png"
   "image/draw"
   "flag"
   "io/ioutil"
   "log"
   "github.com/golang/freetype"
   "golang.org/x/image/font"
   "bufio"

)


func Drawing(text,text1,text2 []string){

   var (
      dpi      = flag.Float64("dpi", 72, "screen resolution in Dots Per Inch")
      fontfile = flag.String("fontfile", "./src/sms_v1/etc/阿丽达黑体.ttf", "filename of the ttf font")
      hinting  = flag.String("hinting", "none", "none | full")
      size     = flag.Float64("size", 20, "font size in points")
      spacing  = flag.Float64("spacing", 1.5, "line spacing (e.g. 2 means double spaced)")
      wonb     = flag.Bool("whiteonblack", false, "white text on a black background")
   )

   flag.Parse()

   // Read the font data.
   fontBytes, err := ioutil.ReadFile(*fontfile)
   if err != nil {
      log.Println(err)
      return
   }
   f, err := freetype.ParseFont(fontBytes)
   if err != nil {
      log.Println(err)
      return
   }

   // Initialize the context.
   fg, bg := image.Black, image.White
   //ruler := color.RGBA{220, 220, 220, 200}
   if *wonb {
      fg, bg = image.White, image.Black
      //ruler = color.RGBA{220, 220, 220, 200}
   }



   // f1, err := os.Open("aa.png")
   // if err != nil {
   //    panic(err)
   // }
   // defer f1.Close()
   // m1, err := png.Decode(f1)
   //if err != nil {
   // panic(err)
   //}
   //bounds := m1.Bounds()

   rgba := image.NewRGBA(image.Rect(0, 0, 640, 480))

   draw.Draw(rgba, rgba.Bounds(), bg, image.ZP, draw.Src)
   //draw.DrawMask(rgba, bounds, bg, image.ZP,, draw.Src)






   c := freetype.NewContext()
   c.SetDPI(*dpi)
   c.SetFont(f)
   c.SetFontSize(*size)
   c.SetClip(rgba.Bounds())
   c.SetDst(rgba)
   c.SetSrc(fg)
   switch *hinting {
   default:
      c.SetHinting(font.HintingNone)
   case "full":
      c.SetHinting(font.HintingFull)
   }

   // Draw the guidelines.
   //for y := 0; y < 480; y++ {
   //      for x := 0; x < 640; x++ {
   //                // 设置某个点的颜色,依次是 RGBA
   //                 rgba.Set(x, y, color.RGBA{uint8(x), uint8(y), 0, 255})
   //            }
   //      }


   for y := 100; y < 130; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{190, 190, 190, 255})
      }
   }

   for y := 130; y < 160; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{28, 172, 255, 255})
      }
   }

   for y := 160; y < 190; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{190, 190, 190, 255})
      }
   }

   for y := 190; y < 220; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{28, 172, 255, 255})
      }
   }

   for y := 220; y < 250; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{190, 190, 190, 255})
      }
   }

   for y := 250; y < 280; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{28, 172, 255, 255})
      }
   }

   for y := 280; y < 310; y++ {
      for x := 10; x < 620; x++ {
         // 设置某个点的颜色,依次是 RGBA
         rgba.Set(x, y, color.RGBA{190, 190, 190, 255})
      }
   }

   // Draw the text.
   pt := freetype.Pt(10, 100+int(c.PointToFixed(*size)>>6))
   for _, s := range text {
      _, err = c.DrawString(s, pt)
      if err != nil {
         log.Println(err)
         return
      }
      pt.Y += c.PointToFixed(*size * *spacing)
   }
   pt1 := freetype.Pt(200, 100+int(c.PointToFixed(*size)>>6))
   for _, s := range text1 {
      _, err = c.DrawString(s, pt1)
      if err != nil {
         log.Println(err)
         return
      }
      pt1.Y += c.PointToFixed(*size * *spacing)
   }

   pt2 := freetype.Pt(400, 70+int(c.PointToFixed(*size)>>6))
   for _, s := range text2 {
      _, err = c.DrawString(s, pt2)
      if err != nil {
         log.Println(err)
         return
      }
      pt2.Y += c.PointToFixed(*size * *spacing)
   }

   // Save that RGBA image to disk.
   outFile, err := os.Create("out.png")
   if err != nil {
      log.Println(err)
      os.Exit(1)
   }
   defer outFile.Close()
   b := bufio.NewWriter(outFile)
   err = png.Encode(b, rgba)
   if err != nil {
      log.Println(err)
      os.Exit(1)
   }
   err = b.Flush()
   if err != nil {
      log.Println(err)
      os.Exit(1)
   }

}

func main() {
   //0 今日订单量
   todayorders := "71车"
   //1 今日销售额
   todaysoale := "4万元"
   //2 本月订单量
   monthorders := "1777车"
   //3 本月客单价
   mcp := "5.66万元"
   // 4 本月销售额
   monthsoale := "20000万元"
   // 5 本月完成率
   mcr := "95.35%"
   // 6 季度销售额
   qsoale := "60000万元"
   // 7 季度完成率
   qcr := "75.33%"
   // 8 年度销售额
   ysoale := "180000万元"
   // 9 年度完成率
   ycr := "35.33%"

   Repurchaserate := "28.57%"
   todayregistration := "13家"
   monthregistration := "153家"
   PV := "1261次"
   UV := "100个"

   time_date := "2018-06-28 15:35"

   var text = []string{
      "今日" ,
      "本月" ,
      "季度" ,
      "年度" ,
      "流量 ",
      "注册量" ,
      "复购率" + Repurchaserate,
   }

   var text1 = []string{
      todaysoale,
      monthsoale,
      qsoale,
      ysoale,
      "PV"+PV,
      "今日"+todayregistration,
      "今日"+todayorders,
   }
   var text2 = []string{
      time_date,
      "客单价" + mcp,
      "完成率" +mcr,
      "完成率" +qcr,
      "完成率" +ycr,
      "UV"+UV,
      "本月"+monthregistration,
      "本月"+monthorders,
   }

   Drawing(text,text1,text2)


}
Golang画图】2D渲染绘图库gg的概念与用法详解(一) Go语言2D画图封装库gg的详细教程,在你理解了gg包的一些基本概念之后,它还是很便于绘制2D图像的,预置了不少类似但不限于画圆、画方、画线、填充、描边、旋转、缩放、文字处理、剪切、蒙版、翻转的接口 阅读详情

相关推荐

Go 图片绘制、合成设计

你可以看到在 Go 语言中处理图片的强大能力,特别是使用库结合其他相关库。这些操作(绘制、合成、旋转、压缩、裁剪)是图片处理中的常见需求,而 Go 语言提供的这些库使得这些任务变得简单且高效。

BOBO博客 1165

Golang绘制简单图形教程

在本教程中,我们将学习如何使用Go语言(Golang)来绘制简单的图形。函数绘制一个矩形,该函数接受四个参数:矩形的左上角X坐标、左上角Y坐标、矩形的宽度和高度。这只是一个简单的例子,你可以根据需要使用更多的函数和参数来绘制其他类型的图形。函数设置绘图颜色,这里我们将背景颜色设置为黑色,将绘图颜色设置为白色。首先,确保你已经正确安装了Go语言,并且配置了相应的环境变量。包,这是一个非常方便的2D绘图库,可以帮助我们轻松地绘制图形。的图片文件,该文件就是我们刚绘制的矩形图形。函数来绘制圆形,或者使用。

MxTransforms的博客 365

Golang性能调优(go-torch, go tool pprof)

Go语言已经为开发者内置配套了很多性能调优监控的好工具和方法,这大大提升了我们profile分析的效率。此外本文还将重点介绍和推荐uber开源的go-torch,其生成的火焰图更方便更直观的帮我们进行性能调优。我也是在实际一次的性能调优中,接触到go-torch,非常棒。

WaltonWang's Blog 3万+

golang 绘图库_Golang 绘图技术(image/draw包介绍)

image/draw 包仅仅定义了一个操作:通过可选的蒙版图(mask image),把一个原始图片绘制到目标图片上,这个操作是出奇的灵活,可以优雅和高效的执行很多常见的图像处理任务。1: // Draw calls DrawMask with a nil mask.2: func Draw(dst Image, r image.Rectangle, src image.Image, sp ima...

weixin_36221980的博客 2221

golang绘图库,图表,画图

golang中的第三方绘图库对比

猛犸象 1002

25 The Go image/draw package go图片/描绘包:图片/描绘包的基本原理

The Go image/draw packagego图片/描绘包:图片/描绘包的基本原理 29 September 2011 Introduction Package image/drawdefines only one operation: drawing a source image onto a destination image, through an optional ...

weixin_30865427的博客 207

【GoCN酷Go推荐】Golang 图片处理 — image

在开发中,有时会遇到对图片的处理需求,在 Python中, PIL/Pillow 库非常强大和易用。而 Golang 语言中,处理图片的标准库 image也可以实现一些基本操作。imag...

Go中国 3512

golang base64转image_Golang之图片处理

之前做项目有一个图片裁剪需求,没想到Golang标准库对图片处理的支持还挺强大的,在此记录一下,以备后用。在Golang里面图片处理主要依赖一个image库,支持常见的png、jpeg、gif等格式,使用这个库我们可以做生成图片、读取图片、裁剪图片等操作。这篇文章只介绍某几个常用的操作,详细API和使用的技巧大家可以参考Go官方文档和博客,比如:https://blog.golang.org/im...

weixin_33060757的博客 3684

golangimage包用法

image包实现了一个基本的2D图像库,该包中包含基本的接口叫做image,这个里面包含color,这个将在image/color中描述, image接口的值创建方式有如下几种: 1调用NewRGBA和NewPaletted 2解码一个包含gif.jpen或者png格式的image数据的io.Reader 首先介绍一些image接口 type Image    //image是一

chenbaoke的专栏 2万+

golang image: unknown format 错误解决

当使用image.Decode处理图片文件时,如报image: unknown format 错误。 示例 package main import ( "fmt" "image" "os" ) func main() { imagePath := "./mm.jpg" file, _ := os.Open(imagePath) defer file.Close() img, _, err := image.Decode(file) if err != nil { fmt.Print

无风的雨 1万+

GoLang入门教程】Go语言几种标准库介绍(五)

上一篇,我们介绍了fmt、Go、html 三个库,这篇我们继续介绍剩下的库这里我们介绍了3个库image、io、math3个库, 下一篇我们将介绍其他的几种标准库😊🙏如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

Venus's Blog 1万+

golangimage转base64

新入坑golang,要做个图形验证码,记录下获得image数据后怎么转成base64的格式

Ioridy 4204

Golang标准库image包:图像处理完全指南

Golang的生态中,image包是处理图像的“基础设施”。它无需额外依赖(仅需引入标准库),支持基本的图像读写、像素操作和格式编码(如JPEG、PNG)。本文将覆盖image包的核心功能,包括:图像的底层表示、颜色模型、坐标系统,以及如何通过代码实现图像的读取、修改和保存。本文将从“图像的本质”讲起,用“照片冲洗店”的故事类比image包的核心概念;接着通过代码示例演示如何操作图像像素;最后用一个“调整图片亮度”的实战项目,带你完整体验从读取到保存的全流程。像素(Pixel)

AI Agent Harness Engineering 1685

Golang实现图像单色处理:Go-ImageColorProcess

在当今数字化时代,图像处理已经成为信息处理的重要组成部分,尤其在提高视觉信息质量、增进用户体验和自动化领域中起着举足轻重的作用。Go语言(又称Golang)作为一门新兴的编程语言,其简洁性和强大的并发处理能力使其在图像处理领域中备受瞩目。本章将介绍Golang在图像处理方面的应用前景,为读者呈现一个图像处理的概览,并为后续章节中关于单色处理、灰度图像处理等更专业内容的深入分析做好铺垫。图像处理是通过一系列操作来改善图像质量,或从图像中提取有用信息的过程。

weixin_30021053的博客 783

Go语言学习之imageimage/color、image/png、image/jpeg包(the way to go)

生命不止,继续 go go go !!!golang同样为我们提供了很多关于图片处理的标准库,这里与大家一起学习分享。image package作用: Package image implements a basic 2-D image library. image包实现了一个基本的2D图像库.方法: func NewNRGBAfunc NewNRGBA(r Rectangle) *NRGBA

一蓑烟雨任平生 也无风雨也无晴 1万+

golang图片处理库image简介

go中处理图片的标准库image支持常见的PNG、JPEG、GIF等格式的图片处理(可读取、裁剪、绘制、生成等)。图片缩放分为保持比例与不保持比例的缩放;保持比例时,要确定新图片的位置(是否居中),以及如何填充空白处。DrawMask多了一个遮罩蒙层参数,Draw为其一种特殊形式(遮罩相关参数为nil)。读取的jpg图像不是RGBA格式的(为YCbCr格式);有了缩放后的大小后,即可通过双线性插值bilinear的方式进行图片的缩放。通过subImage方法可方便地裁剪图片(需要为RGBA格式的).....

飞鹰技术 8046

go语言image、file、base64、buffer之间的互相转换

前言 本笔记只作为学习笔记,本次参考内容来自以下链接: https://studygolang.com/articles/2581 https://studygolang.com/pkgdoc https://zhuanlan.zhihu.com/p/339477329 image image包实现了一个基本的2D图像库,该包中包含基本的接口叫做image,这个里面包含color,这个将在image/color中描述, image接口的值创建方式有如下几种: 1调用NewRGBA和NewPaletted

z6y6t的博客 6015

go指南练习:图像image部分解析

最近刚开始自学Golang,非计算机专业出身,之前主要在写python(主要都是pandas…),上手golang有点磕磕绊绊。现在跟着指南一步一步在做练习,请多多指正。 练习内容 还记得之前编写的图片生成器 吗?我们再来编写另外一个,不过这次它将会返回一个 image.Image 的实现而非一个数据切片。 定义你自己的 Image 类型,实现必要的方法并调用 pic.ShowImage。 Bounds 应当返回一个 image.Rectangle ,例如 image.Rect(0, 0, w, h)。 C

weixin_42810335的博客 896

go语言调用python_Golang 执行Python脚本

一、两种方式通过命令行的方式调用python脚本github.com/sbinet/go-python二、实现1、通过命令行的方式调用python脚本在golang对jpg图片dpi操作未提供原生的相关接口,只好依赖python脚本达到想要的目的main.pyfrom PIL import Image as ImagePIL, ImageFont, ImageDrawimport base64im...

weixin_39881167的博客 1434
上一篇: 注意点
下一篇: golang 模拟请求
defending
博客等级 码龄9年 29粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值