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实现调用其他python脚本的方法
Oct 05 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
Python切换pip安装源的方法详解
Nov 18 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 Python
利用Python破解斗地主残局详解
Jun 30 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
Python eval函数介绍及用法
Nov 09 Python
python 离散点图画法的实现
Apr 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
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
深入PHP数据加密详解
2013/06/18 PHP
解析php5配置使用pdo
2013/07/03 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
python调用c++传递数组的实例
2019/02/13 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
Java面试题:为什么要用Java
2012/05/11 面试题
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
毕业生求职简历的自我评价
2013/10/07 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
哈姆雷特读书笔记
2015/06/29 职场文书
选购到合适的激光打印机
2022/04/21 数码科技