文章目录

  • 一、需求
  • 二、实现文字转单个图片代码
  • 三、实现文字转配对图片代码

一、需求

目前想要将输入的文字,转为指定风格的图片,比如宋体、草体

二、实现文字转单个图片代码

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实现文字转图片相关推荐

  1. [Python] RSS 文字转图片并单独抓取url以文字输出

    为go-cqhttp的使用写的文字转图片功能.但是又考虑到网页链接要OCR识别十分麻烦,所以单独抓取url以文字输出. 在实际操作的过程中遇到了一些问题.因为rss抓取的字符串中,经常会包含换行符\n ...

  2. Python 实现文字转为图片

    话不多说直接上代码 #先导入所需的包 import pygame import ospygame.init() # 初始化B = '请依次点击 "你" "好" ...

  3. 【图像处理】Python实现文字转图片

    一.需求 目前想要将输入的文字,转为指定风格的图片,比如宋体.草体 二.实现文字转单个图片代码 import os import pdbimport PIL import numpy as np fr ...

  4. 文字转图片,文字水印图片,合成图片,教你 Python 生成网站原创配图!

    又是为站佬们服务(写)水文的一篇,如何应用python来生成或者说是合成自己的原创图片,适合各位站群大佬哥们生成自己的图片,避免没有配图或者侵权碰瓷的尴尬,当然本渣渣这里分享的仅仅是源码demo,后续 ...

  5. python图片转换成文字_Python输出汉字字库及将文字转换为图片的方法

    用python输出汉字字库问题1:假设我们知道汉字编码范围是0x4E00到0x9FA5,怎么从十六进制的编码转成人类可读的字呢? 问题2:怎么把unicode编码的字写入文件呢,如果直接用open() ...

  6. 根据公司名称生成base64 logo(python文字转图片)

    最近碰到了一个需求,需要根据公司的名称,生成一个临时的logo,并以base64图片的形式在网页上显示.这个问题拆解一下,可以分为如下两个问题: 显示什么?即公司名称中的哪一部分需要显示出来. 怎么显 ...

  7. python使用fpdf生成发票格式的pdf文件包含:文字、图片logo、表格、条形码等;

    python使用fpdf生成发票格式的pdf文件包含:文字.图片logo.表格.条形码等: pip install fpdf #python使用fpdf生成发票格式的pdf文件包含:文字.图片logo ...

  8. python怎么画简单图片-初学Python-简单的在图片上加文字

    场景 在用户运营中,拉新是第一步.我们产品打算先再小范围试验一下效果,不动用开发哥哥,自己制作邀请海报. 没错,就是最简单的,邀请领奖励活动. UI妹妹把海报模版做出来,邀请码根据用户ID自行填上. ...

  9. python opencv 如何给图片添加文字?cv2.putText() PIL

    参考文章1:python如何在图片上添加文字(中文和英文)Python在图片上添加文字的两种方法:OpenCV和PIL 参考文章2:python之------如何在图片上面添加文字(多种类型的文字)[ ...

最新文章

  1. 揭富人与穷人21个不同思维 看富豪如何脱颖而出
  2. Elasticsearch 如何做到快速检索 - 倒排索引的秘密
  3. (二)文档请求不同源之window.name跨域
  4. 网格弹簧质点系统模拟(Spring-Mass System by Verlet Integration)附源码
  5. mysql-plus多数据库_Springboot+mybatisplus+mysql配置多数据源(注解版)
  6. Linux下查看系统版本号信息的方法
  7. 监督学习 | 朴素贝叶斯之Sklearn实现
  8. 《架构师》反思:系统可靠性
  9. [PATCH] UBUNTU: SAUCE: (no-up) apparmor: Sync to apparmor3 - RC1(v3.4.x kernel)
  10. android 8.1闪退,宁波市民卡app在Android 8.1闪退_宁波民生e点通
  11. Trapcode套装插件原创图文/视频安装教程
  12. kettle 无法连接数据库
  13. 河南的抗疫英雄,给出一系列抗疫英雄的姓名和来自的省份,现在请你帮忙统计来自河南的抗疫英雄有多
  14. scala将csv转换成insert语句
  15. 各种搜索引擎及其使用技巧 效率翻倍
  16. 如何解决SQL Server 2008 无法连接到(local)(服务器名称)
  17. Android studio wifi 连手机
  18. React(二)react脚手架的搭建
  19. 数据结构与算法看这篇就够了
  20. selenium入门教程 hello world

热门文章

  1. windows查询主机名命令
  2. 宇视阿宇摄像机夜间效果好吗?画面可以看清楚吗?
  3. 洛谷P3975 [TJOI2015]弦论
  4. MTK平台产线生产标记位功能
  5. Linux定时任务 crontab(-l -e)、at、batch
  6. 常用格式校验正则表达式
  7. 定差幂线定理例题和练习题
  8. 配置计算机能不能关机,win7电脑设置关机时间的详细步骤
  9. 【C语言快速上手】带你了解C语言,零基础入门①
  10. 什么是最小化可行产品(MVP)?