百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

2021已过去一半,用Python换一张新头像吧

ztj100 2025-03-30 00:18 1 浏览 0 评论

不知不觉,2021年也过去了一半的时间。、

不知道大家年初立的flag,都实现了多少。

这期小F就来教大家,如何使用Python生成emoji风格的头像。

效果大致如下图,由很多的emoji图片方块组成一张新的头像图片

细节图~

主要是通过matplotlib、pillow和numpy这三个库来实现的。

import matplotlib.pyplot as plt
from scipy import spatial
from PIL import Image
import numpy as np

对于numpy和matplotlib(以及几乎所有的图像处理库)而言,图像基本上只是一个矩阵(例如A),其中每个像素(p)都是A的元素。

如果是灰度图像,则每个像素(p)只是一个数字(或标量)。如果为浮点数,则为[0, 1]。如果为整数,则为[0, 255]。

如果不是灰度级(例如在这次的情况下),则每个像素都是尺寸为3-红色(R),绿色(G)和蓝色(B)或尺寸为4-RGBA的矢量(A代表Alpha,表示的是透明度)。

首先读取图像,并且将图像尺寸缩小。

# 读取图片,并且修改图片大小
G_sm = np.array(Image.open('fans.png').resize([50, 50]).getdata()).reshape([50, 50, 3])/256
# 显示图片
plt.figure()
plt.imshow(G_sm)
plt.title('Original Image')
plt.show()

然后读取emoji图像数据,一共是有近1600个emoji图像数据。

# 读取emoji数据
emoji_array = np.load("emojis_16.npy")
# 获取emoji的平均颜色值
emoji_mean_array = np.array([ar.mean(axis=(0,1)) for ar in emoji_array]) 
# 将得到的每个emoji平均颜色值存储在树中以加快搜索速度
tree = spatial.KDTree(emoji_mean_array)

整个图像的平均颜色计算公式如下。

np.load,读取磁盘数组数据的函数,通常数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。

indices = []
# 平整数组,一维
flattened_img = G_sm.reshape(-1, G_sm.shape[-1])
print(flattened_img.shape)
# 匹配最相似的表情符号的像素
for pixel in flattened_img:
    pixel_ = np.concatenate((pixel, [1]))
    # 查询最近的索引
    _, index = tree.query(pixel_)
    indices.append(index)

将原图上每个像素点的颜色均值和emoji的颜色均值配对上。

# 从索引中获取对应的表情符号
emoji_matches = emoji_array[indices]
# 获取图片的高度
dim = G_sm.shape[0]
print(dim)
# 设置最终生成图像的大小,每个表情符号的形状都是(16,16,4),R, G, B, alpha
resized_ar = emoji_matches.reshape((dim, dim, 16, 16,4))

设置生成图像的大小,每个emoji图片的大小设置成16*16。

# 转换单个表情符号补丁(5维)
# 使用numpy块生成完整的图像(三维)
final_img = np.block([[[x] for x in row] for row in resized_ar]) 

生成最终结果图像,并且保存。

# 设置画布
plt.figure()
# 去除坐标轴
plt.axis('off')
# 显示图片
plt.imshow(final_img)
# 保存emoji马赛克风格图像,去除白边
plt.savefig('image_emoji.png', bbox_inches="tight", pad_inches=0.0)
plt.show()

通过设置plt.savefig的参数,去除图像白边,保存图片。

下面就使用小F的微信头像为例,来实验一波~

生成的emoji图看起来不是很细腻,可以设置一下图片参数为100。

G_sm = np.array(Image.open('weixin.png').resize([100, 100]).getdata()).reshape([100, 100, 3])/256

得到结果如下。

看起来还不错,大家伙也可以使用自己喜欢的头像去生成~

使用到的代码以及相关文件已上传,还有大家点赞、收藏、关注!

相关推荐

你不知道的PostgreSQL数据库安装及实现跨库查询PG和Oracle

PG作为近几年最火热的关系型数据,已经被很多开发者所使用,尤其是5G网络普及完毕后,IOT和AI的应用场景下,数据的读写速度要求非常高,MYSQL已经开始不能满足高强度的数据吞吐(这里有争议,这里只是...

从小白到专家 PG技术大讲堂 - Part 3:PG建库与使用

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注...

最全总结,聊聊 Python 数据处理全家桶(PgSQL篇)

来源:AirPython作者:星安果1.前言大家好,我是安果!PgSQL,全称为PostgreSQL,是一款免费开源的关系型数据库相比最流行的Mysql数据库,PgSQL在可靠性、数据完整性...

Excel函数的基本知识和使用,带你迅速掌握函数,可直接套用!

文章最后有彩蛋!好礼相送!...

Excel 小计、总计公式全都能自动计算新增行,套路公式存好

很多同学会觉得Excel单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解Excel的各个知...

Excel查找最后一条记录,3种方法,你会么?

举一个工作中的例子,左边是商品的出库记录,其中的两列数据,现在需要快速找出最后一次出库的时间1、vlookup公式因为每种商品都会有多条出库记录,所以当我们使用vlookup公式时,它只会查找匹配到第...

DeepSeek装进IDEA,全网最全操作指南一篇详解!编程效率大幅提升

在IDEA插件中搜索“通义灵码”,即可获取到AI插件:点击“Install”按钮即可快速安装:安装可能需要一点点时间,等待即可。安装成功以后,在IDEA窗口的右下角,会提示你登录“...

Excel快速合并内容并换行(excel怎么合并后换行)

#一张图记录元旦假期#...

(六)MyBatis面试通关宝典:让你在面试中脱颖而出的关键

一、MyBatis中的工作原理...

Excel数据透视表,逆透视,你会么?

举个工作中的例子来说明,老板发给你左边的表格,让你快速转换成右边的样式,如下所示:1、数据透视表正常情况下,我们都是从右边的数据明细,使用数据透视表,得到左边的结果,简单回顾一一下,我们选中数据区域,...

掌握 Excel 「删除重复项」的4种方法,少做 80%的无用功!

在Excel中,删除重复项是数据清理和整理的常见任务,有多种方法可以实现这一目标。...

一分钟教会你在Excel里面接入DeepSeek,我们一起帮哪吒逆天改命

01...

128G手机还能用两年!微信这新功能突然来了

爽啊,微信最近搞了两个实用性拉满的新功能。不知道大伙有没有碰上过这么个情况。...

Vlookup公式用法大全,建议收藏备用

上班打工人必学的VLOOKUP函数公式,花费2个小时,总结全了,一起来学1、VLOOKUP公式基本用法VLOOKUP公式有4个参数,使用用法:=VLOOKUP(查找值,查找区域,返回第几列,查找方式)...

mariadb数据库使用SQL命令操作表-增删改查

1.DML基础语法DML(DataManipulationLanguage)...

取消回复欢迎 发表评论: