python 就是随便玩玩,生成gif图,生成汉字图片,超级简单

文章目录

    • 主方法调用
    • LetterDrawing
    • WordDoingImage

上图
天生我材必有用,千金散尽还复来
你也想玩的话,可以直接上码云去看 码云链接

主方法调用

import analysisdata.WordDoingImage as WordDoingImage
import analysisdata.LetterDrawing as LetterDrawingif __name__ == '__main__':# 输入的文本,生成的动态图,没弄英文的text_str = '天生我材必有用,千金散尽还复来'#移除中文符号text_str = WordDoingImage.remove_number(text_str)# 生成汉字图片的模版WordDoingImage.main_method(text_str)# 将汉字做成散点图合成gifLetterDrawing.main_method(text_str=text_str, bg_color='#9ACD32')#清除使用完毕的图片LetterDrawing.delete_word_photo(text_str=text_str)

封装了两个类,调用起来更清晰了
散点图部分,参考了下面朋友的分析,大家可以去看看
https://blog.csdn.net/cainiao_python/article/details/117137163
下面是

LetterDrawing

的类

# *_m 代表独立方法,*_p 代表运行过程的方法
import os
import numpy as np
import matplotlib.pyplot as plt
import imageio
import random
import cv2# 跟据数据情况,转化为多个随机点
def random_point_m(text, intensity=2):# 多个随机点填充字母random.seed(420)x = []y = []for i in range(intensity):x = x + random.sample(range(0, 1000), 500)y = y + random.sample(range(0, 1000), 500)if text == ' ':return x, y# 获取图片的maskmask = cv2.imread(f'../photomodel/word/{text}.png', 0)mask = cv2.flip(mask, 0)# 检测点是否在mask中result_x = []result_y = []for i in range(len(x)):if (mask[y[i]][x[i]]) == 0:result_x.append(x[i])result_y.append(y[i])# 返回x,yreturn result_x, result_y# 将输入的文本进行切割
def split_text_m(text, repeat=True, intensity=2):print('将文本转换为数据\n')letters = []for i in text.upper():letters.append(random_point_m(i, intensity=intensity))# 如果repeat为1时,重复第一个字母if repeat:letters.append(random_point_m(text[0], intensity=intensity))return letters# 画图,生成gitdef build_git_m(coordinates_lists, gif_name, n_frames, bg_color, marker_color, marker_size, font_color):print('生成图表\n')filenames = []for index in np.arange(0, len(coordinates_lists) - 1):# 获取当前图像及下一图像的x与y轴坐标值x = coordinates_lists[index][0]y = coordinates_lists[index][1]x1 = coordinates_lists[index + 1][0]y1 = coordinates_lists[index + 1][1]# 查看两点差值while len(x) < len(x1):diff = len(x1) - len(x)x = x + x[:diff]y = y + y[:diff]while len(x1) < len(x):diff = len(x) - len(x1)x1 = x1 + x1[:diff]y1 = y1 + y1[:diff]# 计算路径x_path = np.array(x1) - np.array(x)y_path = np.array(y1) - np.array(y)for i in np.arange(0, n_frames + 1):# 计算当前位置x_temp = (x + (x_path / n_frames) * i)y_temp = (y + (y_path / n_frames) * i)# 绘制图表fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(aspect="equal"))ax.set_facecolor(bg_color)plt.xticks([])  # 去掉x轴plt.yticks([])  # 去掉y轴plt.axis('off')  # 去掉坐标轴plt.scatter(x_temp, y_temp, c=marker_color, s=marker_size)plt.xlim(0, 1000)plt.ylim(0, 1000)# 移除框线ax.spines['right'].set_visible(False)ax.spines['top'].set_visible(False)# 网格线ax.set_axisbelow(True)ax.yaxis.grid(color=font_color, linestyle='dashed', alpha=0.1)ax.xaxis.grid(color=font_color, linestyle='dashed', alpha=0.1)# 保存图片filename = f'../photomodel/frame_{index}_{i}.png'if (i == n_frames):for i in range(5):filenames.append(filename)filenames.append(filename)# 保存plt.savefig(filename, dpi=96, facecolor=bg_color)plt.close()print('保存图表\n')# 生成GIFprint('生成GIF\n')with imageio.get_writer(f'../photomodel/{gif_name}.gif', mode='I') as writer:for filename in filenames:image = imageio.v2.imread(filename)writer.append_data(image)print('保存GIF\n')print('删除图片\n')# 删除图片for filename in set(filenames):os.remove(filename)print('完成')passdef main_method(text_str, bg_color):coordinates_obj = split_text_m(text_str, repeat=True, intensity=50)build_git_m(coordinates_obj,gif_name=text_str[0:5],n_frames=7,bg_color=bg_color,marker_color='#000000',marker_size=0.2,font_color='#000000')passdef delete_word_photo(text_str):text_list = [text_str[i:i + 1] for i in range(0, len(text_str), 1)]for t in text_list:file_name = f'../photomodel/word/{t}.png'os.remove(file_name)pass

以下是图片生成类

WordDoingImage

,使用的词云工具,每个字生成一个图片,不用费劲的去找网络的模版图片,直接自己弄多好

# 2号词云:面朝大海,春暖花开
# B站专栏:同济子豪兄 2019-5-23import wordcloud
import multiprocessing
import re# 将生成的词云保存为output2-poem.png图片文件,保存到当前文件夹中# 将汉字生成黑底的图片
def split_text_m(text_str):"""拆分字符串通过slice语法切割字符串成单个汉字,形成一个数组:return:"""# [word_list_analysis[i:i + num] for i in range(0, len(word_list_analysis), num)]return [text_str[i:i + 1] for i in range(0, len(text_str), 1)]# 作图,根据汉字形状
def draw_image(word):# 构建词云对象w,设置词云图片宽、高、字体、背景颜色等参数,生成白底黑字的图片for w in word:file_name = f'../photomodel/word/{w}.png'w = wordcloud.WordCloud(width=1000, height=1000,background_color='white',font_path='../fontmodel/mashanzhengmaobikaishu.ttf',color_func=lambda *args, **kwargs: (0, 0, 0)).generate(w)# 调用词云对象的generate方法,将文本传入w.to_file(file_name)# 多进程处理,加快速度
def multi_process(text_list, num):pool = multiprocessing.Pool(num)# 将数组拆分为多块parts = [text_list[i:i + num] for i in range(0, len(text_list), num)]pool.map(draw_image, parts)pool.close()pass# 过滤中文符号
def remove_number(text_str):pattern = re.compile(u'[^a-zA-Z0-9\u4e00-\u9fa5]')return re.sub(pattern, '', text_str)# 主方法
def main_method(text_str):text_str = remove_number(text_str)text_list = split_text_m(text_str)multi_process(text_list, 4)

感谢各位能够看完,想玩的,欢迎大家踊跃讨论!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python利器:os与chardet读取多编码文件

在数据处理中会遇到读取位于不同位置的文件,每个文件所在的层级不同,而且每个文件的编码类型各不相同,那么如何高效地读取文件呢? 在读取文件时首先需要获取文件的位置信息,然后根据文件的编码类型来读取文件。本文将使用os获取文件路径,使用chardet得到文件编码类型。 …

预约按摩小程序功能及使用指南;

小程序预约按摩功能及使用指南&#xff1a; 1. 注册登录&#xff1a;用户可选择通过账号密码或微信一键登录&#xff0c;便捷注册&#xff0c;轻松管理预约服务。 2. 查找店铺&#xff1a;展示附近的按摩店铺信息&#xff0c;用户可根据需求选择合适的店铺进行预约。 3. 选择服…

[autojs]界面上检测无障碍服务和悬浮窗

"ui"; ui.layout(<vertical><appbar><toolbar title"悬浮窗权限无障碍服务"/></appbar><horizontal><Switch id"无障碍服务" text"无障碍服务" checked"{{auto.service ! null}}" padding…

SMB信息泄露的利用

一、背景 今天分享SMB信息泄露&#xff0c;SMB&#xff08;Server Message Block&#xff09;网络通信协议&#xff0c;早些时候被用于Web链接和客户端与服务器之间的信息通信&#xff0c;现在大部分Web页面使用HTTP协议&#xff0c;在web领域应用较少。另一方面SMB协议还是被…

【运维篇】5.4 Redis 并发延迟检测

文章目录 0.前言Redis工作原理可能引起并发延迟的常见操作和命令并发延迟检测分析和解读监控数据&#xff1a;优化并发延迟的策略 1. 检查CPU情况2. 检查网络情况3. 检查系统情况4. 检查连接数5. 检查持久化 &#xff1a;6. 检查命令执行情况 0.前言 Redis 6.0版本之前其使用单…

Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 链表的创建 2.0 判断回文链表说明 2.1 快慢指针方法 2.2 使用递归方式实现反转链表方法 2.3 实现判断回文链表 - 使用快慢指针与反转链表方法 3.0 判断环链表说明…

设计模式-迭代器模式-笔记

动机&#xff08;Motivaton&#xff09; 在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们呢希望在不暴露其内部结构的同时&#xff0c;可以让外部客户代码透明地访问其中包含的元素&#xff1b;同时这种“透明遍历”也为“同一…

记一次攻防实战渗透

经典开局一个登录框 由于漏洞应该还未修复。对于数据和相关网址打个码见谅一下 常规思路&#xff08;爆破&#xff09; 常规操作进行一波 尝试弱口令然后开始爆破 对于此种有验证码的爆破&#xff0c;可以借用一个bp插件。 captcha-killer-modified-jdk14.jar 具体使用我就…

游戏报错d3dcompiler_47.dll缺失怎么修复,总结多种修复方法

在使用这些软件和游戏的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;其中之一就是d3dcompiler_47.dll丢失的问题。这个问题可能会导致软件或游戏无法正常运行&#xff0c;给用户带来困扰。本文将详细介绍解决软件游戏d3dcompiler_47.dll丢失的方法&#xff0c;帮助您…

地推团队怎么接一手app拉新项目?这几个接单平台可以试试看

首推平台&#xff1a;“聚量推客” 有粉丝问我&#xff1a; 我在五线小城市做地推&#xff0c;有个10人的地推团队&#xff0c;怎么接到一手靠谱的单子&#xff1f; 其实不止一个粉丝在后台问我&#xff0c;做地推、充场的人都在找单子&#xff0c;做这个行业就没有不缺项目的…

C++学习 --文件

文件操作步骤&#xff1a; 1&#xff0c; 包含头文件#include<fstream> 2&#xff0c; 创建流对象&#xff1a;ofstream ofs 3&#xff0c; 打开文件&#xff1a;ofs.open("文件路径"&#xff0c; 打开方式) 4&#xff0c; 写数据&#xff1a;ofs <<…

2分钟快速安装 `nginx` 和配置 `keepalived`

这是详细的步骤来在 CentOS 7 上安装 nginx 和配置 keepalived。 主服务器&#xff08;IP: 192.168.9.195&#xff09; 安装 Nginx 安装 EPEL 仓库&#xff1a; sudo yum install epel-release -y安装 Nginx&#xff1a; sudo yum install nginx -y启动 Nginx 服务并设置开机…

【C++】基础语法(中)

C基础语法&#xff08;中&#xff09; 文章目录 C基础语法&#xff08;中&#xff09;01数组一维数组数组初始化注意访问练习1练习2练习3普通做法&#xff1a;优化reverse函数练习4 多维数组清空数组memsetmemcpy 数组的部分由上到下&#xff0c;按规律 蛇形矩阵技巧 02 字符串…

《QT从基础到进阶·二十九》QT,opencv源码调试

有时候我们在使用VS调试程序的bug&#xff0c;但发现程序崩溃的地方并不在我们写的程序中&#xff0c;我们通过调用堆栈发现程序崩溃的地方出现在QT或者opencv等源码中&#xff0c;那么我们怎么能把断点打到这些开源库中&#xff0c;下面提供一种办法&#xff1a; 解决方案–右…

C语言——写一个函数,每调用一次这个函数,就会将num的值增加1

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>void Add(int* p) {(*p); // 的优先级高于* } int main() {int num0;Add(&num);printf("第一次调用:num %d\n",num);Add(&num);printf("第二次调用:num %d\n",num);Add(&num);p…

【Spring】之注解存取Bean对象

在本系列的上一篇文章中&#xff0c;我们已经了解了Spring的一些核心概念&#xff0c;并且还学习了Spring存取。但是我们发现在存取的过程中还是比较复杂&#xff0c;接下来我们将学习更为简单的Spring存取&#xff0c;其中涉及到的主要内容就是注解。并且在Spring家族的学习过…

搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录

目录 一. 实验要求 二. 实验准备 三. 实验过程 1. 网关服务器新建网卡并改为仅主机模式 2. 修改新建网卡IP配置文件并重启服务 3. 搭建网关服务器的dhcp服务 4. 修改server2网卡配置文件重启服务并效验 5. 设置主机1的网络连接为仅主机模式 6. 给server2和网关服务器之…

开发者生态:共享知识,携手共进,共创技术辉煌

开发者生态&#xff1a;共享知识&#xff0c;携手共进&#xff0c;共创技术辉煌 在数字化时代&#xff0c;开发者是推动技术进步和创新的重要力量。他们创造着改变世界的软件和应用&#xff0c;推动着技术的边界不断向前。而在这个快速发展的时代&#xff0c;建立一个健康、活跃…

关于这个“这是B站目前讲的最好的【Transformer实战】教程!“视频的目前可以运行的源代码GPU版本

课程链接如下&#xff1a; 2.1认识Transformer架构-part1_哔哩哔哩_bilibili 因为网上可以找到源代码&#xff0c;但是呢&#xff0c;代码似乎有点小错误&#xff0c;我自己改正后&#xff0c;放到了GPU上运行&#xff0c; 代码如下&#xff1a; # 来自https://www.bilibil…

单链表相关面试题--7.链表的回文结构

/* 解题思路&#xff1a; 此题可以先找到中间节点&#xff0c;然后把后半部分逆置&#xff0c;最近前后两部分一一比对&#xff0c;如果节点的值全部相同&#xff0c;则即为回文。 */ class PalindromeList { public:bool chkPalindrome(ListNode* A) {if (A NULL || A->ne…