一、需求

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

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

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 os impo ...

  3. Python 实现文字转为图片

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

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

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

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

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

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

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

  7. Python文字转图片,PIL库,可直接引用

    使用了PIL库. PIL有3个模块Image,ImageFont,ImageDraw. 可以参考大佬们的相关学习链接: Image模块:Python图像处理PIL各模块详细介绍_章子雎的博客-CSDN ...

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

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

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

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

最新文章

  1. 基于深度学习的OCR-from 美團技術團隊
  2. raspberry 烧写镜像到SD卡
  3. gradle_使用Gradle构建和应用AST转换
  4. 数组中其余的排除_胆码中26,或许这样选号更容易中奖!双色球055期红球胆码+大底!(附实战精选)...
  5. 12c集群日志位置_面试问Redis集群,被虐的不行了......
  6. HTTPS 路径配置
  7. Dropbox推独立应用,公司估值已达100亿美元
  8. Linux的实际操作:Linux的分区
  9. Javascript基础之-原型(prototype)
  10. 工作以后就不怎么想学习了
  11. MySQL数据库:参数优化
  12. 计算机维修英语情景对话大全,实用英语短对话:修电脑
  13. java与wps_java能否wps调用页码
  14. 美元符号在什么计算机语言,美元符号是什么?怎么打?
  15. deny后加to do还是doing_还在为动词后面接不定式还是动名词而发愁?点开解惑
  16. [UNR #3]百鸽笼
  17. app后端设计(3)--短信,邮件,推送服务(2014.12.05更新)
  18. Tomcat启动出现乱码·解决方法
  19. 水库安全监测主要包含什么内容(大坝安全监测、水雨情自动测报)
  20. DODAB纳米脂质体囊泡/PANC-1细胞膜的PEG修饰的脂质体M-PEG-LIP的相关研究与制备

热门文章

  1. 经营简报及考核360表格
  2. asp.net会议室网上预约系统【源码分享】
  3. 科学计数法 (分析)
  4. Proe Creo 二次开发之修改模型中的草绘模型--特征元素树
  5. 民用GPS精度不够的情况下是如何用于无人驾驶的
  6. 恐怖的银行信用卡复利
  7. 前端实现下载excel文件的el-table表格数据
  8. Invalid Provisioning Profile
  9. 绝对路径和相对路径的区别 什么时候用绝对路径? 什么时候用相对路径?
  10. 攻防世界 Misc高手进阶区 - Hidden Write