我的编程空间,编程开发者的网络收藏夹
学习永远不晚

go怎么实现图片拼接与文字书写

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

go怎么实现图片拼接与文字书写

本文小编为大家详细介绍“go怎么实现图片拼接与文字书写”,内容详细,步骤清晰,细节处理妥当,希望这篇“go怎么实现图片拼接与文字书写”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    一:图片拼接

    go标准库的image包本身就能实现拼接,因此还是比较简单的

    直接上代码

    1.1 图片拼接代码

    //图片拼接func MergeImageNew(base image.Image, mask image.Image, paddingX int, paddingY int) (*image.RGBA, error) {baseclass="lazy" data-srcBounds := base.Bounds().Maxmaskclass="lazy" data-srcBounds := mask.Bounds().MaxnewWidth := baseclass="lazy" data-srcBounds.XnewHeight := baseclass="lazy" data-srcBounds.YmaskWidth := maskclass="lazy" data-srcBounds.XmaskHeight := maskclass="lazy" data-srcBounds.Ydes := image.NewRGBA(image.Rect(0, 0, newWidth, newHeight)) // 底板//首先将一个图片信息存入jpgdraw.Draw(des, des.Bounds(), base, base.Bounds().Min, draw.Over)//将另外一张图片信息存入jpgdraw.Draw(des, image.Rect(paddingX, newHeight-paddingY-maskHeight, (paddingX+maskWidth), (newHeight-paddingY)), mask, image.ZP, draw.Over)return des, nil}

    核心就是使用image>newRGBA新建一个空白底图,让后将背景图,拼接图使用draw.Draw画上去就好了。

    1.2 从本地、网络读取图片

    从本地读取

    func GetImageFromFile(filePath string) (img image.Image, err error) {f1class="lazy" data-src, err := os.Open(filePath)if err != nil {return nil, err}defer f1class="lazy" data-src.Close()buff := make([]byte, 512) // why 512 bytes ? see http://golang.org/pkg/net/http/#DetectContentType_, err = f1class="lazy" data-src.Read(buff)if err != nil {return nil, err}filetype := http.DetectContentType(buff)fmt.Println(filetype)fclass="lazy" data-src, err := os.Open(filePath)defer fclass="lazy" data-src.Close()switch filetype {case "image/jpeg", "image/jpg":img, err = jpeg.Decode(fclass="lazy" data-src)if err != nil {fmt.Println("jpeg error")return nil, err}case "image/gif":img, err = gif.Decode(fclass="lazy" data-src)if err != nil {return nil, err}case "image/png":img, err = png.Decode(fclass="lazy" data-src)if err != nil {return nil, err}default:return nil, err}return img, nil}

    从网络中读取

    func GetImageFromNet(url string) (image.Image, error) {res, err := http.Get(url)if err != nil || res.StatusCode != 200 {return nil, err}defer res.Body.Close()m, _, err := image.Decode(res.Body)return m, err}

    保存图片

    func SaveImage(targetPath string, m image.Image) error {fSave, err := os.Create(targetPath)if err != nil {return err}defer fSave.Close()err = jpeg.Encode(fSave, m, nil)if err != nil {return err}return nil}

    二:文字书写

    图片书写文字是基于 github.com/golang/freetype 这个库实现的

    import ("github.com/golang/freetype""github.com/golang/freetype/truetype""golang.org/x/image/font""image""io/ioutil")//字体相关type TextBrush struct {FontType  *truetype.FontFontSize  float64FontColor *image.UniformTextWidth int}func NewTextBrush(FontFilePath string, FontSize float64, FontColor *image.Uniform, textWidth int) (*TextBrush, error) {fontFile, err := ioutil.ReadFile(FontFilePath)if err != nil {return nil, err}fontType, err := truetype.Parse(fontFile)if err != nil {return nil, err}if textWidth <= 0 {textWidth = 20}return &TextBrush{FontType: fontType, FontSize: FontSize, FontColor: FontColor, TextWidth: textWidth}, nil}// 图片插入文字func (fb *TextBrush) DrawFontOnRGBA(rgba *image.RGBA, pt image.Point, content string) {c := freetype.NewContext()c.SetDPI(72)c.SetFont(fb.FontType)c.SetHinting(font.HintingFull)c.SetFontSize(fb.FontSize)c.SetClip(rgba.Bounds())c.SetDst(rgba)c.Setclass="lazy" data-src(fb.FontColor)c.DrawString(content, freetype.Pt(pt.X, pt.Y))}func Image2RGBA(img image.Image) *image.RGBA {baseclass="lazy" data-srcBounds := img.Bounds().MaxnewWidth := baseclass="lazy" data-srcBounds.XnewHeight := baseclass="lazy" data-srcBounds.Ydes := image.NewRGBA(image.Rect(0, 0, newWidth, newHeight)) // 底板//首先将一个图片信息存入jpgdraw.Draw(des, des.Bounds(), img, img.Bounds().Min, draw.Over)return des}

    使用example

    func TestTextBrush_DrawFontOnRGBA(t *testing.T) {textBrush, err := NewTextBrush("字体库ttf位置", 20, image.Black, 20)if err != nil {t.Log(err)}backgroud, err := GetImageFromFile("./resource/backgroud.jpg")if err != nil {t.Log(err)}des := Image2RGBA(backgroud)textBrush.DrawFontOnRGBA(des, image.Pt(10, 50), "世界你好")//调整颜色textBrush.FontColor = image.NewUniform(color.RGBA{R: 0x8E,G: 0xE5,B: 0xEE,A: 255,})textBrush.DrawFontOnRGBA(des, image.Pt(10, 80), "我是用Go拼上的文字")if err := SaveImage("./resource/text.png", des); err != nil {t.Log(err)}}

    先使用NewTextBrush第一个参数是字体库文件位置。这里使用的ttf格式的字体库,网上应该有免费的字体库。

    读到这里,这篇“go怎么实现图片拼接与文字书写”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    go怎么实现图片拼接与文字书写

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    go怎么实现图片拼接与文字书写

    本文小编为大家详细介绍“go怎么实现图片拼接与文字书写”,内容详细,步骤清晰,细节处理妥当,希望这篇“go怎么实现图片拼接与文字书写”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一:图片拼接go标准库的image
    2023-06-29

    python怎么实现多张图片的无损拼接

    本篇内容主要讲解“python怎么实现多张图片的无损拼接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python怎么实现多张图片的无损拼接”吧!目录导入 python 库查看需要拼接的图片横向
    2023-06-20

    python怎么实现图片转文字

    本文小编为大家详细介绍“python怎么实现图片转文字”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么实现图片转文字”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。python图片转文字用pytho
    2023-07-05

    OpenCV-Python怎么实现两张图片自动拼接成全景图

    这篇文章给大家分享的是有关OpenCV-Python怎么实现两张图片自动拼接成全景图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景介绍图片的全景拼接如今已不再稀奇,现在的智能摄像机和手机摄像头基本都带有图片自
    2023-06-15

    vue怎么实现复制文字和图片

    本篇内容主要讲解“vue怎么实现复制文字和图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现复制文字和图片”吧!document.execCommand(copy)在很久之前我们是
    2023-07-05

    怎么用Python3代码实现把情书写到图片中

    这篇文章主要讲解了“怎么用Python3代码实现把情书写到图片中”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python3代码实现把情书写到图片中”吧!1 Pillow 安装我们都知
    2023-06-30

    Java怎么实现抠图片文字或签名

    本篇内容介绍了“Java怎么实现抠图片文字或签名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java抠图片文字或签名运行原理第一步 遍历像
    2023-07-02

    java图片文字提取功能怎么实现

    要实现Java的图片文字提取功能,可以使用OCR(Optical Character Recognition,光学字符识别)技术。OCR可以识别图像中的文字,并将其转换为可编辑的文本。以下是一个简单的Java代码示例,使用Tesserac
    2023-10-25

    PHP怎么实现给图片添加文字水印

    本篇内容主要讲解“PHP怎么实现给图片添加文字水印”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP怎么实现给图片添加文字水印”吧!PHP给图片添加文字水印实例,支持中文文字水印,是否覆盖原图
    2023-06-04

    Python怎么实现文字pdf转换图片pdf效果

    本篇内容主要讲解“Python怎么实现文字pdf转换图片pdf效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现文字pdf转换图片pdf效果”吧!代码展示先安装依赖pip i
    2023-06-29

    css怎么实现背景图片透明文字不透明

    要实现背景图片透明,文字不透明的效果,可以使用CSS的伪元素和定位技巧来实现。首先,将要显示的文字包裹在一个容器元素内。例如,使用一个 `div` 元素作为容器:```htmlHello, World!
    2023-08-09

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录