Python实现文字转图片
文章目录
- 一、需求
- 二、实现文字转单个图片代码
- 三、实现文字转配对图片代码
一、需求
目前想要将输入的文字,转为指定风格的图片,比如宋体、草体
二、实现文字转单个图片代码
import os
import pdbimport PIL
import numpy as np
from PIL import Image, ImageFont
from PIL import ImageDrawimport scipy.misc as miscCANVAS_SIZE = 256
# CANVAS_SIZE = 224
# CHAR_SIZE = 200
CHAR_SIZE = 220
EMBEDDING_DIM = 128
X_OFFSET = 20
Y_OFFSET = 20def _draw_single_char(font, ch, width, height):img = Image.new("RGB", (width, height), (255,255,255))draw = ImageDraw.Draw(img)draw.text((0, 0), ch, fill=0, font=font)
# 这里的设置是为了和原始的训练集参数设置一致# draw.text((X_OFFSET, Y_OFFSET), ch, fill=0, font=font)return imgdef get_textsize(font, ch):img = Image.new("RGB", (1, 1), (255, 255, 255))draw = ImageDraw.Draw(img)char_size = draw.textsize(ch, font=font)return char_sizedef draw_single_char(img, canvas_size, char_size):width, height = img.sizefactor = width * 1.0 / char_sizemax_height = canvas_size * 2if height / factor > max_height: # too longimg = img.crop((0, 0, width, int(max_height * factor)))if height / factor > char_size + 5: # CANVAS_SIZE/CHAR_SIZE is a benchmark, height should be lessfactor = height * 1.0 / char_sizeimg = img.resize((int(width / factor), int(height / factor)), resample=PIL.Image.LANCZOS)bg_img = Image.new("RGB", (canvas_size, canvas_size), (255, 255, 255))offset = ((canvas_size - img.size[0]) // 2, (canvas_size - img.size[1]) // 2)bg_img.paste(img, offset)return bg_imgdef draw_single_char_by_font(ch, font, canvas_size, char_size):width, height = get_textsize(font, ch)char_img = _draw_single_char(font, ch, width, height)return draw_single_char(char_img, canvas_size, char_size)def save_imgs(imgs, count, save_dir):# 这里的0是label标签p = os.path.join(save_dir, "0_%03d.jpg" % count)imgs.save(p)def draw_paired_image(src_img, dst_img, canvas_size):assert src_img.size == (canvas_size, canvas_size)assert dst_img.size == (canvas_size, canvas_size)example_img = Image.new("RGB", (canvas_size * 2, canvas_size), (255, 255, 255))example_img.paste(dst_img, (0, 0))example_img.paste(src_img, (canvas_size, 0))return example_imgdef draw_example(ch, src_font, dst_font, canvas_size, filter_hashes, char_size):src_img = draw_single_char_by_font(ch, src_font, canvas_size, char_size)dst_img = draw_single_char_by_font(ch, dst_font, canvas_size, char_size)# check the filter example in the hashes or notdst_hash = hash(dst_img.tobytes())if dst_hash in filter_hashes or np.min(src_img) == 255 or np.min(dst_img) == 255:return Nonereturn draw_paired_image(src_img, dst_img, canvas_size)def draw_example_src_only(ch, src_font, dst_img, canvas_size, char_size):src_img = draw_single_char_by_font(ch, src_font, canvas_size, char_size)assert dst_img.size == (canvas_size, canvas_size), pdb.set_trace()if np.min(src_img) == 255 or np.min(dst_img) == 255:return Noneexample_img = Image.new("RGB", (canvas_size * 2, canvas_size), (255, 255, 255))example_img.paste(dst_img, (0, 0))example_img.paste(src_img, (canvas_size, 0))return example_imgif __name__ == '__main__':dst_font = "fonts/font/caoti.ttf"save_dir = "test/"test = "我想要图片"print(os.path.isfile(dst_font))dst_font = ImageFont.truetype(dst_font, size=CHAR_SIZE)count=0for ch in list(test):dst_img = draw_single_char_by_font(ch, dst_font, CANVAS_SIZE, CHAR_SIZE)save_imgs(dst_img,count,save_dir)count = count+1
三、实现文字转配对图片代码
字体顺序可以根据自己的需求进行调
import os
import pdbimport PIL
import numpy as np
from PIL import Image, ImageFont
from PIL import ImageDrawimport scipy.misc as miscCANVAS_SIZE = 256
# CANVAS_SIZE = 224
# CHAR_SIZE = 200
CHAR_SIZE = 220
EMBEDDING_DIM = 128
X_OFFSET = 20
Y_OFFSET = 20def _draw_single_char(font, ch, width, height):img = Image.new("RGB", (width, height), (255,255,255))draw = ImageDraw.Draw(img)draw.text((0, 0), ch, fill=0, font=font)# 这里的设置是为了和原始的训练集参数设置一致# draw.text((X_OFFSET, Y_OFFSET), ch, fill=0, font=font)return imgdef get_textsize(font, ch):img = Image.new("RGB", (1, 1), (255, 255, 255))draw = ImageDraw.Draw(img)char_size = draw.textsize(ch, font=font)return char_sizedef draw_single_char(img, canvas_size, char_size):width, height = img.sizefactor = width * 1.0 / char_sizemax_height = canvas_size * 2if height / factor > max_height: # too longimg = img.crop((0, 0, width, int(max_height * factor)))if height / factor > char_size + 5: # CANVAS_SIZE/CHAR_SIZE is a benchmark, height should be lessfactor = height * 1.0 / char_sizeimg = img.resize((int(width / factor), int(height / factor)), resample=PIL.Image.LANCZOS)bg_img = Image.new("RGB", (canvas_size, canvas_size), (255, 255, 255))offset = ((canvas_size - img.size[0]) // 2, (canvas_size - img.size[1]) // 2)bg_img.paste(img, offset)return bg_imgdef draw_single_char_by_font(ch, font, canvas_size, char_size):width, height = get_textsize(font, ch)char_img = _draw_single_char(font, ch, width, height)return draw_single_char(char_img, canvas_size, char_size)def save_imgs(imgs, count, save_dir):# 这里的0是label标签p = os.path.join(save_dir, "0_%03d.jpg" % count)imgs.save(p)def draw_paired_image(src_img, dst_img, canvas_size):assert src_img.size == (canvas_size, canvas_size)assert dst_img.size == (canvas_size, canvas_size)example_img = Image.new("RGB", (canvas_size * 2, canvas_size), (255, 255, 255))example_img.paste(dst_img, (0, 0))example_img.paste(src_img, (canvas_size, 0))return example_imgdef draw_example(ch, src_font, dst_font, canvas_size, filter_hashes, char_size):src_img = draw_single_char_by_font(ch, src_font, canvas_size, char_size)dst_img = draw_single_char_by_font(ch, dst_font, canvas_size, char_size)# check the filter example in the hashes or notdst_hash = hash(dst_img.tobytes())if dst_hash in filter_hashes or np.min(src_img) == 255 or np.min(dst_img) == 255:return Nonereturn draw_paired_image(src_img, dst_img, canvas_size)def draw_example_src_only(ch, src_font, dst_img, canvas_size, char_size):src_img = draw_single_char_by_font(ch, src_font, canvas_size, char_size)assert dst_img.size == (canvas_size, canvas_size), pdb.set_trace()if np.min(src_img) == 255 or np.min(dst_img) == 255:return Noneexample_img = Image.new("RGB", (canvas_size * 2, canvas_size), (255, 255, 255))example_img.paste(dst_img, (0, 0))example_img.paste(src_img, (canvas_size, 0))return example_imgif __name__ == '__main__':dst_font = "fonts/font/caoti.ttf"src_font = "fonts/font/songti.ttf"save_dir = "test/"test = "我想要图片"src_font = ImageFont.truetype(src_font, size=CHAR_SIZE)dst_font = ImageFont.truetype(dst_font, size=CHAR_SIZE)count=0for ch in list(test):dst_img = draw_single_char_by_font(ch, dst_font, CANVAS_SIZE, CHAR_SIZE)example_img1 = draw_example_src_only(ch,src_font,dst_img,CANVAS_SIZE,CHAR_SIZE)save_imgs(example_img1,count,save_dir)count = count+1
Python实现文字转图片相关推荐
- [Python] RSS 文字转图片并单独抓取url以文字输出
为go-cqhttp的使用写的文字转图片功能.但是又考虑到网页链接要OCR识别十分麻烦,所以单独抓取url以文字输出. 在实际操作的过程中遇到了一些问题.因为rss抓取的字符串中,经常会包含换行符\n ...
- Python 实现文字转为图片
话不多说直接上代码 #先导入所需的包 import pygame import ospygame.init() # 初始化B = '请依次点击 "你" "好" ...
- 【图像处理】Python实现文字转图片
一.需求 目前想要将输入的文字,转为指定风格的图片,比如宋体.草体 二.实现文字转单个图片代码 import os import pdbimport PIL import numpy as np fr ...
- 文字转图片,文字水印图片,合成图片,教你 Python 生成网站原创配图!
又是为站佬们服务(写)水文的一篇,如何应用python来生成或者说是合成自己的原创图片,适合各位站群大佬哥们生成自己的图片,避免没有配图或者侵权碰瓷的尴尬,当然本渣渣这里分享的仅仅是源码demo,后续 ...
- python图片转换成文字_Python输出汉字字库及将文字转换为图片的方法
用python输出汉字字库问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢? 问题2:怎么把unicode编码的字写入文件呢,如果直接用open() ...
- 根据公司名称生成base64 logo(python文字转图片)
最近碰到了一个需求,需要根据公司的名称,生成一个临时的logo,并以base64图片的形式在网页上显示.这个问题拆解一下,可以分为如下两个问题: 显示什么?即公司名称中的哪一部分需要显示出来. 怎么显 ...
- python使用fpdf生成发票格式的pdf文件包含:文字、图片logo、表格、条形码等;
python使用fpdf生成发票格式的pdf文件包含:文字.图片logo.表格.条形码等: pip install fpdf #python使用fpdf生成发票格式的pdf文件包含:文字.图片logo ...
- python怎么画简单图片-初学Python-简单的在图片上加文字
场景 在用户运营中,拉新是第一步.我们产品打算先再小范围试验一下效果,不动用开发哥哥,自己制作邀请海报. 没错,就是最简单的,邀请领奖励活动. UI妹妹把海报模版做出来,邀请码根据用户ID自行填上. ...
- python opencv 如何给图片添加文字?cv2.putText() PIL
参考文章1:python如何在图片上添加文字(中文和英文)Python在图片上添加文字的两种方法:OpenCV和PIL 参考文章2:python之------如何在图片上面添加文字(多种类型的文字)[ ...
最新文章
- 揭富人与穷人21个不同思维 看富豪如何脱颖而出
- Elasticsearch 如何做到快速检索 - 倒排索引的秘密
- (二)文档请求不同源之window.name跨域
- 网格弹簧质点系统模拟(Spring-Mass System by Verlet Integration)附源码
- mysql-plus多数据库_Springboot+mybatisplus+mysql配置多数据源(注解版)
- Linux下查看系统版本号信息的方法
- 监督学习 | 朴素贝叶斯之Sklearn实现
- 《架构师》反思:系统可靠性
- [PATCH] UBUNTU: SAUCE: (no-up) apparmor: Sync to apparmor3 - RC1(v3.4.x kernel)
- android 8.1闪退,宁波市民卡app在Android 8.1闪退_宁波民生e点通
- Trapcode套装插件原创图文/视频安装教程
- kettle 无法连接数据库
- 河南的抗疫英雄,给出一系列抗疫英雄的姓名和来自的省份,现在请你帮忙统计来自河南的抗疫英雄有多
- scala将csv转换成insert语句
- 各种搜索引擎及其使用技巧 效率翻倍
- 如何解决SQL Server 2008 无法连接到(local)(服务器名称)
- Android studio wifi 连手机
- React(二)react脚手架的搭建
- 数据结构与算法看这篇就够了
- selenium入门教程 hello world