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中for循环的使用
Apr 14 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
python的turtle库使用详解
May 10 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
python对XML文件的操作实现代码
Mar 27 Python
Python基于httpx模块实现发送请求
Jul 07 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
python tkinter实现定时关机
Apr 21 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 如何向 MySQL 发送数据
2006/10/09 PHP
php include,include_once,require,require_once
2008/09/05 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
python tkinter canvas使用实例
2019/11/04 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
会计学专业求职信
2014/07/17 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
八一建军节慰问信
2015/02/14 职场文书
Python基础之Socket通信原理
2021/04/22 Python
详解MySQL集群搭建
2021/05/26 MySQL
仅用几行Python代码就能复制她的U盘文件?
2021/06/26 Python
Python自动化实战之接口请求的实现
2022/05/30 Python