在Pillow和matplotlib中遇到的一些中文乱码问题

今天在使用python的Pillow库和matplotlib库时,遇到了一些中文乱码问题,在此整理一下,避免遗忘。

我是在windows平台下使用的,个人觉得windows平台出编码问题比Ubuntu要多一些,可能是因为windows是用GBK编码的,而Linux使用unicode编码的原因。


在使用Pillow画树状图时,输出乱码的源代码是这样的:

from PIL import Image,ImageDraw,ImageFont
draw.text((x+5,y-7),labels[clust.id],(0,0,0))

最开始报错:

latin-1' codec can't encode characters in position 9-13: ordinal not in range(256)

解决办法是加上encode:

draw.text((x+5,y-7),labels[clust.id].encode('utf-8'),(0,0,0),font=font1)

但是输出变成了拉丁文:


后来上网查找,发现有一个更简单的方法,加一行这个

font1 = ImageFont.truetype('simsun.ttc', 24)

上面那句改成

draw.text((x+5,y-7),labels[clust.id],(0,0,0),font=font1)

就变成了:


成功!


在使用matplotlib画饼状图时,又遇到了中文乱码的问题:

听从网上的建议,选择了一个一劳永逸的方法,修改了matplotlib的配置文件

matplotlinrc

将其中

#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
的注释去掉,同时为了使负号正常显示

将#axes.unicode_minus  : True    # use unicode for the minus symbol

的True改为False

这样,就OK了



后记:为什么写出来感觉是很简单的事情,但是实际上我上网搜索了一个多小时来解决这两个问题来着....




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Pillow库进行文显示时,可能会遇到乱码问题。这是因为Pillow默认使用的字体不支持文字符。解决这个问题的方法是指定一个支持文字符的字体。 首先,你需要确保你的系统已经安装了支持文字符的字体。常见的文字体有宋体、微软雅黑、黑体等。如果你没有安装这些字体,可以通过以下步骤安装: 1. 在网上搜索并下载你想要使用的文字体文件(一般是.ttf格式)。 2. 将字体文件复制到你的系统字体目录下。在Windows系统,字体目录一般位于C:\Windows\Fonts;在Linux系统,字体目录一般位于/usr/share/fonts。 3. 安装字体文件。在Windows系统,只需双击字体文件,然后点击“安装”按钮即可;在Linux系统,可以使用命令行工具将字体文件复制到字体目录下。 安装完字体后,你可以使用以下代码来指定使用该字体进行文显示: ```python from PIL import Image, ImageDraw, ImageFont # 打开图片 image = Image.open("image.jpg") # 创建一个可以用于绘制文字的对象 draw = ImageDraw.Draw(image) # 指定字体文件和字体大小 font = ImageFont.truetype("path/to/font.ttf", size=24) # 绘制文字 draw.text((10, 10), "你好,世界!", font=font, fill=(255, 255, 255)) # 保存图片 image.save("output.jpg") ``` 在上面的代码,你需要将`"path/to/font.ttf"`替换为你安装的文字体文件的路径。然后,使用`ImageFont.truetype()`函数加载字体文件,并指定字体大小。最后,使用`draw.text()`函数绘制文文字。 这样,你就可以使用指定的文字体进行文显示了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值