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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python数据结构链表之单向链表(实例讲解)
Jul 25 Python
python Celery定时任务的示例
Mar 13 Python
详谈python在windows中的文件路径问题
Apr 28 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
浅析Python函数式编程
Oct 06 Python
使用Python横向合并excel文件的实例
Dec 11 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
python中有帮助函数吗
Jun 19 Python
详解Python流程控制语句
Oct 28 Python
python 如何在测试中使用 Mock
Mar 01 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
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php Smarty模板生成html文档的方法
2010/04/12 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
Javascript面向对象之四 继承
2011/02/08 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
jQuery语法总结和注意事项小结
2012/11/11 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
Python读取图片属性信息的实现方法
2016/09/11 Python
django中的HTML控件及参数传递方法
2018/03/20 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
解决tensorflow训练时内存持续增加并占满的问题
2020/01/19 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
Python可以用来做什么
2020/11/23 Python
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
会计自荐书
2013/12/02 职场文书
公务员职业生涯规划书范文  
2014/01/19 职场文书
海飞丝广告词
2014/03/20 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
文艺晚会开场白
2015/05/29 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript