在Golang中画一个矩形?

2023-12-29

我想绘制一个带有一些矩形、条形码的邮寄标签,然后最终生成一个 PNG/PDF 文件。

除了使用基元(逐像素)绘制形状之外,还有更好的方法在 Go 中绘制形状吗?


标准 Go 库不提供原始绘图或绘画功能。

它提供的是颜色模型(image/color http://golang.org/pkg/image/color/包)和一个Image http://golang.org/pkg/image/#Image具有多个实现的接口(image http://golang.org/pkg/image/包裹)。博客文章Go 镜像包 http://blog.golang.org/go-image-package对此有一个很好的介绍。

它还提供了将图像与不同操作结合起来的能力(例如,将它们相互绘制)image/draw http://golang.org/pkg/image/draw/包裹。它的用途远比乍听起来要多得多。有一篇关于image/draw软件包展示了它的一些潜力:Go 图像/绘图包 http://blog.golang.org/go-imagedraw-package

另一个例子是开源游戏地鼠迷宫 https://github.com/gophergala/golab (披露:我是作者)它有一个图形界面,它只使用标准 Go 库来组装其视图。

它是开源的,请查看其来源,了解它是如何完成的。它有一个可滚动的游戏视图,其中包含移动图像/动画。

标准库还支持读写常见图像格式,例如GIF http://golang.org/pkg/image/gif/, JPEG http://golang.org/pkg/image/jpeg/, PNG http://golang.org/pkg/image/png/,并且对其他格式的支持是开箱即用的:BMP http://godoc.org/golang.org/x/image/bmp, RIFF http://godoc.org/golang.org/x/image/riff, TIFF http://godoc.org/golang.org/x/image/tiff乃至WEBP http://godoc.org/golang.org/x/image/webp(仅一个读取器/解码器)。

尽管标准库没有提供支持,但在图像上绘制线条和矩形相当容易。给定一个img支持使用以下方法更改像素的图像:Set(x, y int, c color.Color)(例如image.RGBA http://golang.org/pkg/image/#RGBA对我们来说是完美的)和col类型的color.Color http://golang.org/pkg/image/color/#Color:

// HLine draws a horizontal line
func HLine(x1, y, x2 int) {
    for ; x1 <= x2; x1++ {
        img.Set(x1, y, col)
    }
}

// VLine draws a veritcal line
func VLine(x, y1, y2 int) {
    for ; y1 <= y2; y1++ {
        img.Set(x, y1, col)
    }
}

// Rect draws a rectangle utilizing HLine() and VLine()
func Rect(x1, y1, x2, y2 int) {
    HLine(x1, y1, x2)
    HLine(x1, y2, x2)
    VLine(x1, y1, y2)
    VLine(x2, y1, y2)
}

这里使用这些简单的函数是一个可运行的示例程序,它绘制一条线和一个矩形并将图像保存到.png file:

import (
    "image"
    "image/color"
    "image/png"
    "os"
)

var img = image.NewRGBA(image.Rect(0, 0, 100, 100))
var col color.Color

func main() {
    col = color.RGBA{255, 0, 0, 255} // Red
    HLine(10, 20, 80)
    col = color.RGBA{0, 255, 0, 255} // Green
    Rect(10, 10, 80, 50)

    f, err := os.Create("draw.png")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    png.Encode(f, img)
}

如果你想绘制文字,你可以使用FreeType 的 Go 实现 https://github.com/golang/freetype。另请查看此问题,了解在图像上绘制字符串的简单介绍:如何在 Go 中向图像添加简单的文本标签? https://stackoverflow.com/questions/38299930/how-do-add-a-text-label-to-an-image-in-go

如果您想要高级和更复杂的绘图功能,还有许多外部库 https://github.com/golang/go/wiki/Projects#graphics-and-audio可用,例如:

https://github.com/llgcode/draw2d https://github.com/llgcode/draw2d

https://github.com/fogleman/gg https://github.com/fogleman/gg

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Golang中画一个矩形? 的相关文章

  • 在 golang 中将 []uint32 转换为 []byte,反之亦然

    最有效的 性能 转换方式是什么 uint32向和从 byte在戈兰 例如 func main source uint32 1 2 3 dest make byte 4 len source source to dest check len
  • Go的堆接口实现的优先级队列的大小限制

    在Java中 有一个具有大小属性 的PriorityQueue 我在这里也期待同样的事情 如果我没记错的话 用例 一一读取数百万数据并将其发送到优先级队列 我只想要前 5 个计算元素 因此我只想要大小为 5 的堆 优先级队列 我正在尝试使用
  • 使用Python将图像转换为十六进制格式

    我的下面有一个jpg文件tmp folder upload path tmp resized test jpg 我一直在使用下面的代码 Method 1 with open upload path rb as image file enco
  • 如何访问主包之外的标志?

    We 解析标志 http golang org pkg flag FlagSet Parse当然 在 main 包中的 main go 中 然后我们有另一个包 我们想在其中读取一些标志的值 flags Args http golang or
  • 无法在 Golang 中导入本地模块

    我正在尝试导入本地模块 但无法使用以下命令导入它go mod 我最初使用以下方式构建了我的项目go mod init github com AP Ch2 GOMS 注意我的环境是go1 14我使用 VSCode 作为我的编辑器 这是我的文件
  • Swift 3:绘制矩形

    我刚接触 swift 三天 我正在尝试弄清楚如何绘制矩形 我对这门语言太陌生 不知道要扩展的类和要重写的方法 并且我四处寻找示例代码 但似乎没有任何效果 我将其归因于我对 swift 3 的使用 我现在正在尝试的是 import UIKit
  • Android 如何使用意图发送文本和图像或任何对象?

    我知道可以与以下人员分享短信ACTION SEND通过指定Intent EXTRA TEXT 同样的方法适用于图像 Intent EXTRA STREAM 但是如何将文本和图像添加到同一意图呢 您可以通过意图发送文本和图像 例如 如果您要发
  • 带有导出字段的私有类型

    在 Go 教程的第二天有这样的练习 为什么拥有带有导出字段的私有类型会很有用 例如 package geometry type point struct X Y int name string 请注意point是小写的 因此不会导出 而字段
  • 算法挑战:从图像生成配色方案

    背景 因此 我正在开发一个网络应用程序的新版本 而且 我们发现我们的用户非常懒惰 实在是太懒了 事实上 我们为他们做的工作越多 他们就越喜欢这项服务 现有应用程序的一部分要求用户选择要使用的配色方案 但是 我们有一张图片 用户网站的截图 为
  • 将 Websocket 消息发送到 Go 中的特定通道(使用 Gorilla)

    我对 Go 很陌生 并且发现自己使用套接字作为我的第一个项目 这是一个多余的问题 但我无法理解如何将 websocket 更新发送到 Go 中的特定通道 使用 Gorilla 我在用此链接中的代码示例 https github com go
  • 更新表格视图图像子视图中的图像的最佳方法是什么?

    具体来说 如何从 uitableview 单元格中获取图像子视图 我的表视图从网络异步获取数据 当我第一次创建图像视图时 我通过以下方式添加了视图 imageView setImage image cell addSubview image
  • 是否可以在 Golang 中 pickle 结构实例

    我正在 Golang 中做一些机器学习 我现在碰壁了 我训练有素的分类器需要将近半分钟的时间来训练 并且想要保存分类器的该实例 这样我就不必每次都从头开始训练 在 Golang 中应该如何去做呢 仅供参考 我的分类器是一个结构 当我用 py
  • Golang 从管道读取读取大量数据

    我正在尝试读取一个正在被焦油化 流式传输到标准输入的存档 但我正在以某种方式读取far管道中的数据多于 tar 发送的数据 我像这样运行我的命令 tar cf somefolder my go binary 源代码是这样的 package
  • 在 Go 中,如何将函数的 stdout 捕获到字符串中?

    例如 在 Python 中 我可以执行以下操作 realout sys stdout sys stdout StringIO StringIO some function prints to stdout get captured in t
  • Django 管理通过 ImageField 链接到图像

    我已经设置了一个活动的 Django 模型 其中包含以下字段 class Activity models Model thumbnail models ImageField upload to thumbs blank True null
  • 无法将字符串解组为 int64 类型的 Go 值

    我有结构 type tySurvey struct Id int64 json id omitempty Name string json name omitempty I do json Marshal在 HTML 页面中写入 JSON
  • 使用相同图像映射的多个图像 - 如何在单击时返回正确的图像参考?

    我在一个页面上有多个图像 所有图像都使用相同的图像映射 我需要知道用户点击了哪个图像 问题是 this 返回对的引用 area 而不是 img 这是代码 img src image png img src image png img src
  • 如何使用 go web 服务器提供静态 html 文件?

    如何使用 go web 服务器提供 index html 或其他静态 HTML 文件 我只想要一个基本的静态 HTML 文件 例如一篇文章 我可以从 Go Web 服务器提供该文件 HTML 应该可以在 go 程序之外进行修改 就像使用 H
  • 如何用PHP读取图像?

    我知道 localfile FILES media tmp name 如果使用 POST 方法 将获取图像 我正在尝试读取与我的代码位于同一目录中的图像 我如何读取它并将其分配给像上面这样的变量 您发布的代码不会读取图像数据 而是读取其文件
  • 图像在 3D 空间中绕 Y 轴旋转

    我有一个 BufferedImage 我想用 theta 角而不是仿射变换绕 Java 中的 Y 轴旋转图像 图片 旋转将如下图所示 矩形将是图像 我可以通过旋转图像的每个像素并绘制图像来做到这一点 因为我必须旋转很多图像 所以我认为这不是

随机推荐

  • 如何使用 xUnit、SubSpec 和 FakeItEasy 测试抛出的异常

    我使用 xUnit SubSpec 和 FakeItEasy 进行单元测试 到目前为止 我已经创建了一些积极的单元测试 如下所示 Given a Options presenter Context gt presenter new Opti
  • javascript 中的这是什么:“var var1 = var1 || []”

    我只是想增加我的核心 JavaScript 知识 有时我会看到这样的语句 但我不知道它的作用 var var1 var1 它是什么意思和 或它的用途是什么 以及如何使用它 谢谢 基本上 它会查看变量是否var1已经存在并且是 真实的 如果是
  • 如何忽略 jq 中损坏的 JSON 行?

    使用时jq为了处理日志文件 某些行可能会被破坏 因此jq抛出错误并停止处理 例如完整日志 level debug time 2021 09 24T19 42 47 140 0800 message sent send binary to w
  • Qt 的控制台/终端小部件?

    有人知道 Qt4 中充当终端 控制台的小部件吗 开源会很好 提前致谢 QConsole http qconsole sourceforge net 曾经做过类似的事情 不确定该项目是否已激活 但您可能想看看
  • 重音不敏感搜索 django sqlite

    我正在使用 sqlite 和 django 我正在尝试使用非重音搜索查询来搜索存储在 sqlite 数据库中的重音字符串 例如 当数据库包含 R o Grande 时 搜索 Rio Grande 我发现这个帖子SQLite 不区分重音的搜索
  • 是否可以反向解码 x86-64 指令?

    我想知道是否可以反向解码 x86 64 指令 我需要这个作为运行时反汇编器 用户可以指向内存中的随机位置 然后应该能够向上滚动并查看指定地址之前有哪些指令 我想通过反向解码来做到这一点 x86 指令流不是自同步的 只能向前明确解码 您需要知
  • 有没有可以离线工作的 Java 翻译库?

    我真的需要找到一个可以翻译的Java翻译库 法语 英语 德语等语言之间 但不需要 互联网连接 要翻译单独的单词 请查看 它们具有简单的基于文本的格式 可以使用 Java 轻松解析
  • 在某个位置插入列表的成本/复杂性是多少?

    在 Python 中 一个list https docs python org 2 tutorial datastructures html more on lists has list insert i x 到 在给定位置插入项目 在C
  • 带 .htaccess 的 PHP 根目录

    我使用的是 000webhost 它使用根文件夹中的 public html 文件夹作为站点的可见根 在该文件夹中 我有一个包含一些 PHP 脚本的资产文件夹 以及包含 PHP 索引页的其他文件夹 使用require assets incl
  • 在 F# 中运行 ML.Net Iris 演示时,我使用 TextLoader 是否错误?

    我是 F NET 新手 我正在尝试运行接受的答案中提供的 F 示例如何将介绍性 ML Net 演示转换为 F https stackoverflow com questions 50322653 how to translate the i
  • PHP无会话用户认证教程

    我需要为计算机安全项目的一部分构建自己的系统 而不使用 php 会话 仅 cookie 但我迷路了 我发现的所有教程都使用会话 有充分的理由 所以我想知道是否有人知道自己的 php 用户身份验证教程 你基本上可以像你自己一样实现一些会话 这
  • nil:NilClass 与 simple_form 和 Mongoid 的未定义方法 `valid_options'

    我有两个模型 类别和帖子 类别 rb class Category include Mongoid Document field title type gt String has many posts autosave gt true de
  • Angular 2 - 样式组件的选择器边框 css 属性

    Update 在我下面的评论中 您可以在 Google Drive 上找到一个压缩项目 任何人都可以制作一个 Plunker 我从未做过 需要更改什么 任何解释此更改的文章 博客 我有一个SearchComponent这延伸了BaseCom
  • 优化包含窗口函数的参数化 T-SQL 查询的执行计划

    编辑 我已经更新了示例代码并提供了完整的表和视图实现以供参考 但基本问题保持不变 我在尝试查询的数据库中有一个相当复杂的视图 当我尝试通过将 WHERE 子句硬编码为特定外键值来从视图中检索一组行时 视图会以最佳执行计划 正确使用索引等 快
  • PostgreSQL GROUP BY LOWER() 不起作用

    我正在尝试使用GROUP BY在 PostgreSQL 9 4 1 中 并没有像我希望的那样成功 有几个人 http bytes com topic postgresql answers 422112 group case insensit
  • 如何播放 WPF 声音文件资源

    我正在尝试在 WPF 应用程序中播放声音文件 目前我有以下电话 private void PlaySound string uriPath Uri uri new Uri pack application Media movepoint w
  • Makefile:修改模式规则中的词干

    我的目录中有文件名为data and helpers 我想用它们来创建目标文件result 目录结构如下 data A file1 file2 B file1 helpers file1 file2 目录结构在result与中相同data
  • Swift、Equatable 协议错误?

    我正在 Swift 中构建一个非常简单的结构 其中包含一组可选值 该结构必须符合 Equatable 协议 这是代码 struct MyTable Equatable var values Int Array count 64 repeat
  • 添加到表格时淡入表格行

    我有以下代码可将新行添加到表的末尾 row data last after some HTML rows 我想用类似的东西 fadeIn slow 所以每一行在出现之前都会淡入 但我似乎没有得到任何动画 row data last afte
  • 在Golang中画一个矩形?

    我想绘制一个带有一些矩形 条形码的邮寄标签 然后最终生成一个 PNG PDF 文件 除了使用基元 逐像素 绘制形状之外 还有更好的方法在 Go 中绘制形状吗 标准 Go 库不提供原始绘图或绘画功能 它提供的是颜色模型 image color