python2和python3实现在图片上加汉字的方法


Posted in Python onAugust 22, 2019

python2和python3实现在图片上加汉字,最主要的区别还是内部编码方式不一样导致的,在代码上表现为些许的差别。理解了内部编码原理也就不会遇到这些问题了,以下代码是在WIN10系统上时测好用的。

Python2 在图片上加汉字代码实现

# -*- coding: cp936 -*-
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
def ID_2_Word(txt):
 tmp_ID = txt.split(':')[0]
 value = txt.split(':')[-1]
 '''
 numbers = {
  'DS041' : "Coolant TEMP   ",
  'DS048' : "RPM     ",
  'DS049' : "Speed     ",
  'DS098' : "Oil level    ",
  'DS123' : "Control Module Voltage"
 }
 '''
 numbers = {
  'DS041' : "冷却液温度",
  'DS048' : "发动机转速",
  'DS049' : "车速 ",
  'DS098' : "燃油液位输入",
  'DS123' : "控制模块电压"
 }
 word = numbers.get(tmp_ID, None)
 result = str(word) + ':' + value
 #print(result)
 return result
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
 if (isinstance(img, np.ndarray)): #判断是否OpenCV图片类型
  img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
 draw = ImageDraw.Draw(img)
 #fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
 fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="gb2312") #cp936
 draw.text((left, top), text, textColor, font=fontText)
 return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
def layer1_show(img,data):
 frame = cv2.resize(img, (1280, 720), interpolation=cv2.INTER_CUBIC)
 font = ImageFont.truetype('font/simsun.ttc',24,encoding="utf-8")
 OBD_string = data
 y0, dy = 50, 25
 for i, txt in enumerate(OBD_string.split(';')):
   #word = txt
  word = ID_2_Word(txt) #将OBD信号的ID转换为中文
  word = unicode(word,'gbk')
   #print(i, txt.split(':')[0])
  y = y0+i*dy
  frame = cv2ImgAddText(frame, word, 100, y, (255, 0, 0), 20)
 cv2.imshow("layer_1", frame)
 cv2.waitKey(0)
if __name__ == '__main__':
 img = cv2.imread("map.png");
 data = "DS041: 88;DS048: 800;DS049: 64;DS098: 0.00;DS123: 0.00"
 layer1_show(img,data)

python2和python3实现在图片上加汉字的方法

Python3 在图片上加汉字代码实现

import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
def ID_2_Word(txt):
 tmp_ID = txt.split(':')[0]
 value = txt.split(':')[-1]
 '''
 numbers = {
  'DS041' : "Coolant TEMP   ",
  'DS048' : "RPM     ",
  'DS049' : "Speed     ",
  'DS098' : "Oil level    ",
  'DS123' : "Control Module Voltage"
 }
 '''
 numbers = {
  'DS041' : "冷却液温度",
  'DS048' : "发动机转速",
  'DS049' : "车速 ",
  'DS098' : "燃油液位输入",
  'DS123' : "控制模块电压"
 }
 word = numbers.get(tmp_ID, None)
 result = str(word) + ':' + value
 #print(result)
 return result
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
 if (isinstance(img, np.ndarray)): #判断是否OpenCV图片类型
  img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
 draw = ImageDraw.Draw(img)
 #fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
 fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="gb2312") #cp936
 draw.text((left, top), text, textColor, font=fontText)
 return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
def layer1_show(img,data):
 frame = cv2.resize(img, (1280, 720), interpolation=cv2.INTER_CUBIC)
 font = ImageFont.truetype('font/simsun.ttc',24,encoding="utf-8")
 OBD_string = data
 y0, dy = 50, 25
 for i, txt in enumerate(OBD_string.split(';')):
   #word = txt
  word = ID_2_Word(txt) #将OBD信号的ID转换为中文
  #word = unicode(word,'gbk')
  y = y0+i*dy
  frame = cv2ImgAddText(frame, word, 100, y, (255, 0, 0), 20)
 cv2.imshow("layer_1", frame)
 cv2.waitKey(0)
if __name__ == '__main__':
 img = cv2.imread("map.png");
 data = "DS041: 88;DS048: 800;DS049: 64;DS098: 0.00;DS123: 0.00"
 layer1_show(img,data)

python2和python3实现在图片上加汉字的方法

遇到的问题

python2中:UnicodeDecodeError: ‘ascii' codec can't decode byte 0xe8 in position 0: ordinal not in range(128)

这是因为这是因为默认的是utf-8编码格式

中文字符的Unicode编码0x0800-0xFFFF之间,(utf-8包含了部分汉字)
当你试图将该“中文字符”转成U码的utf-8时超出了其范筹
而GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充,
所以解决方法是将utf-8改为gbk

word = unicode(word,'utf-8') 改为 word = unicode(word,'gbk')

总结

以上所述是小编给大家介绍的python2和python3实现在图片上加汉字的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
深入学习python的yield和generator
Mar 10 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
python3.6实现学生信息管理系统
Feb 21 Python
python实现的汉诺塔算法示例
Oct 23 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
Python实现搜索算法的实例代码
Jan 02 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 Python
Python如何急速下载第三方库详解
Nov 02 Python
Matplotlib animation模块实现动态图
Feb 25 Python
Python图像处理之图像拼接
Apr 28 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 #Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 #Python
Python实现的微信红包提醒功能示例
Aug 22 #Python
Python PIL图片添加字体的例子
Aug 22 #Python
在python image 中安装中文字体的实现方法
Aug 22 #Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 #Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 #Python
You might like
PHP默认安装产生系统漏洞
2006/10/09 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
extjs render 用法介绍
2013/09/11 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
2018/12/17 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
Pytorch 实现权重初始化
2019/12/31 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
国贸专业的职业规划范文
2014/01/23 职场文书
幼儿园消防安全制度
2014/01/26 职场文书
增员口号大全
2014/06/18 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
小学班主任评语
2014/12/29 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电