from PIL import Image,文字成图,ImageFont import jieba分词,input优雅python绘制图片
开始的代码
import os
from PIL import Image, ImageDraw, ImageFont
import jiebadef generate_image_with_white_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width = 800image_height = 600bg_color = (255, 255, 255)  # 白色# 创建图片对象image = Image.new("RGB", (image_width, image_height), bg_color)draw = ImageDraw.Draw(image)# 设置字体和字体大小font_size = 36font = ImageFont.truetype(font_path, font_size)# 将文本按行分割lines = text.split("\n")# 绘制文本y = 50  # 初始纵坐标for line in lines:words = jieba.lcut(line)  # 分词去重for word in words:word = word.replace(",", " ").replace("。", " ").replace("?", " ")  # 替换标点符号为空格draw.text((50, y), word, fill=(0, 0, 0), font=font)  # 绘制文本y += 50  # 纵坐标递增# 保存图片image.save(output_path)def generate_image_with_black_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width = 800image_height = 600bg_color = (0, 0, 0)  # 黑色# 创建图片对象image = Image.new("RGB", (image_width, image_height), bg_color)draw = ImageDraw.Draw(image)# 设置字体和字体大小font_size = 36font = ImageFont.truetype(font_path, font_size)# 将文本按行分割lines = text.split("\n")# 绘制文本y = 50  # 初始纵坐标for line in lines:words = jieba.lcut(line)  # 分词去重for word in words:word = word.replace(",", " ").replace("。", " ").replace("?", " ")  # 替换标点符号为空格draw.text((50, y), word, fill=(255, 255, 255), font=font)  # 绘制文本y += 50  # 纵坐标递增# 保存图片image.save(output_path)def main():# 输入文本内容print("请输入多行文本内容,以空行结束:")text = ""while True:line = input()if line == "":breaktext += line + "\n"# 创建保存路径save_path = "/storage/emulated/0/文件/aidliux/生成图片/"os.makedirs(save_path, exist_ok=True)# 生成白底黑字宋体图片default_font_path = "path_to_default_font.ttf"  # 将此处替换为安卓默认字体文件路径white_bg_output_path = os.path.join(save_path, "white_bg_simsun.jpg")generate_image_with_white_bg(text, default_font_path, white_bg_output_path)# 生成黑底白字宋体图片black_bg_output_path = os.path.join(save_path, "black_bg_simsun.jpg")generate_image_with_black_bg(text, default_font_path, black_bg_output_path)print("白底黑字宋体图片已生成,保存路径为:{}".format(white_bg_output_path))print("黑底白字宋体图片已生成,保存路径为:{}".format(black_bg_output_path))if __name__ == "__main__":main()运行的结果
/data/user/0/org.qpython.qpy/files/bin/qpy thon3.sh "/storage/emulated/0/qpython/表格 操作行列1.2.5.6.5.文字成图.py" && exit
作行列1.2.5.6.5.文字成图.py" && exit     < 请输入多行文本内容,以空行结束:
优雅之美Traceback (most recent call last):File "/storage/emulated/0/qpython/表格操 作行列1.2.5.6.5.文字成图.py", line 90, in  <module>main()File "/storage/emulated/0/qpython/表格操 作行列1.2.5.6.5.文字成图.py", line 80, in  maingenerate_image_with_white_bg(text, def ault_font_path, white_bg_output_path)File "/storage/emulated/0/qpython/表格操 作行列1.2.5.6.5.文字成图.py", line 17, in  generate_image_with_white_bgfont = ImageFont.truetype(font_path, f ont_size)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^File "/data/user/0/org.qpython.qpy/files /lib/python3.11/site-packages/PIL/ImageFon t.py", line 976, in truetypereturn freetype(font)^^^^^^^^^^^^^^File "/data/user/0/org.qpython.qpy/files /lib/python3.11/site-packages/PIL/ImageFon t.py", line 973, in freetypereturn FreeTypeFont(font, size, index,  encoding, layout_engine)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^File "/data/user/0/org.qpython.qpy/files /lib/python3.11/site-packages/PIL/ImageFon t.py", line 249, in __init__self.font = core.getfont(^^^^^^^^^^^^^
OSError: cannot open resource
1|:/ $
1|:/ $
错误❌print
这个错误是由于缺少字体文件导致的。在代码中,你需要替换default_font_path变量为安卓设备上的默认字体文件路径。
你可以按照以下步骤来解决这个问题:
1. 在安卓设备上找到默认字体文件路径。通常情况下,它们位于/system/fonts/目录下,文件名可能是DroidSans.ttf、NotoSansCJK-Regular.ttc等。你可以使用文件管理器或者终端来查找。
2. 将找到的默认字体文件路径替换到代码中的default_font_path变量。例如,假设找到的路径是/system/fonts/DroidSans.ttf,则代码中应该替换为default_font_path = "/system/fonts/DroidSans.ttf"。
完成以上步骤后,再次运行代码,应该就能正常生成图片了。
我们增加了一些改进的方法
文件名命名方法:编号. 词语 时间戳
保存 /storage/emulated/0/文件/代码print相关/结构图/
没有就新建
中文字体 /storage/emulated/0/文件/字体大全/字体包/宋体.ttf
其它中文字体 /storage/emulated/0/文件/字体大全/字体包/
英语字体 /storage/emulated/0/文件/字体大全/
这个目录下检索可用英语.ttf,如果需要英语的话
文件名没有库或者样式就省略掉
改进的代码
这段代码比较长,你可以按照以下代码来更新你的程序:
import os
import time
from PIL import Image, ImageDraw, ImageFont
import jiebadef generate_image_with_white_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width = 800image_height = 600bg_color = (255, 255, 255)  # 白色# 创建图片对象image = Image.new("RGB", (image_width, image_height), bg_color)draw = ImageDraw.Draw(image)# 设置字体和字体大小font_size = 36font = ImageFont.truetype(font_path, font_size)# 将文本按行分割lines = text.split("\n")# 绘制文本y = 50  # 初始纵坐标for line in lines:words = jieba.lcut(line)  # 分词去重for word in words:word = word.replace(",", " ").replace("。", " ").replace("?", " ")  # 替换标点符号为空格draw.text((50, y), word, fill=(0, 0, 0), font=font)  # 绘制文本y += 50  # 纵坐标递增# 保存图片image.save(output_path)def generate_image_with_black_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width = 800image_height = 600bg_color = (0, 0, 0)  # 黑色# 创建图片对象image = Image.new("RGB", (image_width, image_height), bg_color)draw = ImageDraw.Draw(image)# 设置字体和字体大小font_size = 36font = ImageFont.truetype(font_path, font_size)# 将文本按行分割lines = text.split("\n")# 绘制文本y = 50  # 初始纵坐标for line in lines:words = jieba.lcut(line)  # 分词去重for word in words:word = word.replace(",", " ").replace("。", " ").replace("?", " ")  # 替换标点符号为空格draw.text((50, y), word, fill=(255, 255, 255), font=font)  # 绘制文本y += 50  # 纵坐标递增# 保存图片image.save(output_path)def main():# 输入文本内容print("请输入多行文本内容,以空行结束:")text = ""while True:line = input()if line == "":breaktext += line + "\n"# 创建保存路径output_dir = "/storage/emulated/0/文件/代码print相关/结构图/"os.makedirs(output_dir, exist_ok=True)# 初始化时间戳timestamp = int(time.time())# 获取中文字体路径chinese_font_path = "/storage/emulated/0/文件/字体大全/字体包/宋体.ttf"# 获取英文字体路径english_font_path = Noneenglish_fonts_dir = "/storage/emulated/0/文件/字体大全/"for filename in os.listdir(english_fonts_dir):if filename.endswith(".ttf"):english_font_path = os.path.join(english_fonts_dir, filename)break# 生成白底黑字宋体图片white_bg_output_path = os.path.join(output_dir, "{}.{}.jpg".format(len(text), timestamp))generate_image_with_white_bg(text, chinese_font_path, white_bg_output_path)# 生成黑底白字宋体图片black_bg_output_path = os.path.join(output_dir, "{}.{}.jpg".format(len(text), timestamp))generate_image_with_black_bg(text, chinese_font_path, black_bg_output_path)print("白底黑字宋体图片已生成,保存路径为:{}".format(white_bg_output_path))print("黑底白字宋体图片已生成,保存路径为:{}".format(black_bg_output_path))if english_font_path is not None:# 生成白底黑字英语图片white_bg_output_path = os.path.join(output_dir, "{}e.{}.jpg".format(len(text), timestamp))generate_image_with_white_bg(text, english_font_path, white_bg_output_path)# 生成黑底白字英语图片black_bg_output_path = os.path.join(output_dir, "{}e.{}.jpg".format(len(text), timestamp))generate_image_with_black_bg(text, english_font_path, black_bg_output_path)print("白底黑字英语图片已生成,保存路径为:{}".format(white_bg_output_path))print("黑底白字英语图片已生成,保存路径为:{}".format(black_bg_output_path))if __name__ == "__main__":main()
这个程序会根据输入的文本生成4张图片,分别是白底黑字宋体图片、黑底白字宋体图片、白底黑字英语图片和黑底白字英语图片。其中,中文字体使用的是/storage/emulated/0/文件/字体大全/字体包/宋体.ttf,英文字体则是在/storage/emulated/0/文件/字体大全/目录下查找的第一个.ttf文件作为默认字体。保存路径为/storage/emulated/0/文件/代码print相关/结构图/,文件名格式为编号. 词语 时间戳.jpg。如果没有对应的库或者样式,则省略掉,例如只有编号和时间戳的情况。
请注意,英文字体在中文文本中可能会出现乱码,需要根据实际情况进行调整。
结果

 让我们看看有没有这个文件,可以看到只生成的两个图片
 
 这样对我来说就是基本有一个雏形了
 
 前面是用中文打的,我的字体夹还真包里有很多字体,目前可能晕倒。
 
 这是用英文打的,就是2个框框加2个XX,可以看到是俩扑克牌!
相关文章:
 
from PIL import Image,文字成图,ImageFont import jieba分词,input优雅python绘制图片
开始的代码 import os from PIL import Image, ImageDraw, ImageFont import jiebadef generate_image_with_white_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width 800image_height 600bg_color (255, 255, 255) # 白色# 创建图片对象image Imag…...
渗透测试信息收集方法笔记
一、指纹识别 1、钟馗之眼https://www.zoomeye.org/ 2、天眼查https://www.tianyancha.com/ 3、工具:御剑WEB指纹识别系统正式版,可以查网站用了哪些框架,什么版本,有哪些漏洞 4、kali whatweb 二、信息泄露 1、csdn https://www.…...
 
协议栈——连接服务器
如对方的ip和port配置信息,这里的连接是指通信前的准备工作 上一篇介绍查看套接字的命令时,可以看到很多信息,但是刚刚创建出来的套接字是什么信息都没有的,协议栈也因此不知道和谁通信; 客户端填补信息 这一步中调…...
 
数据结构--队列与循环队列的实现
数据结构–队列的实现 1.队列的定义 比如有一个人叫做张三,这天他要去医院看病,看病时就需要先挂号,由于他来的比较晚,所以他的号码就比较大,来的比较早的号码就比较小,需要到就诊窗口从小号到大依次排队,前面的小号就诊结束之后,才会轮到大号来,小号每就诊完毕就销毁,每新来…...
 
数据结构—栈、队列、链表
一、栈 Stack(存取O(1)) 先进后出,进去123,出来321。 基于数组:最后一位为栈尾,用于取操作。 基于链表:第一位为栈尾,用于取操作。 1.1、数组栈 /*** 基于数组实现的顺序栈&#…...
2023年4月到7月工作经历
2023年4 有同事说程序崩溃一起分析得结果 unsigned uNum 2; std::string str "abc" uNum; std::cout << str; 结果是c 。如果uNum 很大的话,就可能崩溃。 unsigned uNum 2; //std::string str "abc" uN…...
 
嵌入式Linux应用开发-驱动大全-同步与互斥③
嵌入式Linux应用开发-驱动大全-同步与互斥③ 第一章 同步与互斥③1.4 Linux锁的介绍与使用1.4.1 锁的类型1.4.1.1 自旋锁1.4.1.2 睡眠锁 1.4.2 锁的内核函数1.4.2.1 自旋锁1.4.2.2 信号量1.4.2.3 互斥量1.4.2.4 semaphore和 mutex的区别 1.4.3 何时用何种锁1.4.4 内核抢占(pree…...
 
力扣-383.赎金信
Idea 使用一个hashmap 或者一个int数组存储第二次字符串中每一个字符及其出现的次数 遍历第一个字符串,讲出现的重复字符减1,若该字符次数已经为0,则返回false AC Code class Solution { public:bool canConstruct(string ransomNote, strin…...
 
计算机网络 第二章物理层
计算机网络第二章知识点速刷 其中重要的是信源和信宿,以及调制解调器在通信模型当中起到的作用。...
uniapp:动态修改页面标题
我们经常遇到这种情况,点击新增按钮,进入一个空白表单页面,点击修改按钮,其实也是进入这个表单页面,只是表单内容已经被数据库的记录反显了,为了区别页面,我们还需要动态设置页面的标题…...
 
java学生管理系统
一、项目概述 本学生管理系统旨在提供一个方便的界面,用于学校或机构管理学生信息,包括学生基本信息、课程成绩等。 二、系统架构 系统采用经典的三层架构,包括前端使用JavaSwing,后端采用Java Servlet,数据库使用M…...
Docker和容器化:简介和使用案例
Docker和容器化:简介和使用案例 引言 容器化技术在近年来变得越来越流行,为开发人员和运维团队提供了更加灵活、高效的软件部署和管理方式。其中,Docker是最为知名和广泛使用的容器化平台之一。本篇博客文章将介绍Docker和容器化的基本概念…...
 
(高阶) Redis 7 第18讲 RedLock 分布式锁
🌹 以下分享 RedLock 分布式锁,如有问题请指教。🌹🌹 如你对技术也感兴趣,欢迎交流。🌹🌹🌹 如有对阁下帮助,请👍点赞💖收藏🐱🏍分享😀 问题 分布式锁问题从(高阶) Redis 7 第17讲 分布式锁 实战篇_PJ码匠人的博客-CSDN博客 这篇文章来看,…...
 
嵌入式软件架构基础设施设计方法
大家好,今天分享一篇嵌入式软件架构设计相关的文章。 软件架构这东西,众说纷纭,各有观点。在我看来,软件架构是软件系统的基本结构,包含其组件、组件之间的关系、组件设计与演进的规则,以及体现这些规则的基…...
 
MySQL进阶_3.性能分析工具的使用
文章目录 第一节、数据库服务器的优化步骤第二节、查看系统性能参数第三节、 慢查询日志第四节、 查看 SQL 执行成本第五节、 分析查询语句:EXPLAIN5.1 基本语法5.2 EXPLAIN各列作用 第一节、数据库服务器的优化步骤 当我们遇到数据库调优问题的时候,可…...
 
Scala第十三章节
Scala第十三章节 1. 高阶函数介绍 2. 作为值的函数 3. 匿名函数 4. 柯里化 5. 闭包 6. 控制抽象 7. 案例: 计算器 scala总目录 文档资料下载...
 
Nginx高级 第一部分:扩容
Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云服务资源增加 整机:IBM、浪潮、DELL、HP等 CPU/主板:更新到主流 网卡:10G/40G网卡 磁盘:SAS(SCSI) HDD(机械…...
vue项目上线后去除控制台所有console.log打印-配置说明
方式一 npm i babel-plugin-transform-remove-console --save-dev babel.config.js文件中添加 // 然后在babel.config.js中添加判断 const prodPlugin []if (process.env.NODE_ENV production) { // 如果是生产环境,则自动清理掉打印的日志,但保留…...
 
《XSS-Labs》02. Level 11~20
XSS-Labs 索引Level-11题解 Level-12题解 Level-13题解 Level-14题解 Level-15题解 Level-16题解 Level-17题解 Level-18~20题解 靶场部署在 VMware - Win7。 靶场地址:https://github.com/do0dl3/xss-labs 只要手动注入恶意 JavaScript 脚本成功,就可以…...
Java中处理千万级数据的最佳实践:性能优化指南
在今天的数字化时代,处理大规模数据已经成为许多Java应用程序的核心任务。无论您是构建数据分析工具、实现实时监控系统,还是处理大规模日志文件,性能优化都是确保应用程序能够高效运行的关键因素。本指南将介绍一系列最佳实践,帮…...
 
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
 
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
 
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
 
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
