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 相关文章推荐
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
浅谈对yield的初步理解
May 29 Python
浅谈Django中view对数据库的调用方法
Jul 18 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
python机器学习实现决策树
Nov 11 Python
python实现FTP循环上传文件
Mar 20 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Numpy 多维数据数组的实现
Jun 18 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
pandas 实现将NaN转换为None
May 14 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使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
基于JavaScript 实现拖放功能
2019/09/12 Javascript
js实现时钟定时器
2020/03/26 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
Python常见异常分类与处理方法
2017/06/04 Python
Python模拟登陆实现代码
2017/06/14 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python OpenCV获取视频的方法
2018/02/28 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
python3排序的实例方法
2020/10/20 Python
python实现经纬度采样的示例代码
2020/12/10 Python
python文件路径操作方法总结
2020/12/21 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
文明之星事迹材料
2014/05/09 职场文书
暑假生活随笔
2015/08/15 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书