千图成像!祝可爱的小伙伴们圣诞快乐!给女朋友一个惊喜吧!

(python实例源代码3)跟圣诞树杠上了,最美的和最可爱的圣诞树必须要占一个 对的没错,这篇是第3篇圣诞树代码,也将是最后一篇圣诞树的代码。故事的起源发生在2天前....给女朋友发了第一版圣诞树,被吐槽就这?太丑!本人表示收到了一万点暴击,决心一雪前耻! 阅读详情

前言

当走上街头时能隐约察觉到多了些许“红白绿”的色彩,那是:圣诞老人🎅、雪花❄️、圣诞树🎄。弥红灯闪烁,各类促销活动海报令郎满目。没有错,圣诞节快来了~

从写博客开始,一路上得到了不少小伙伴的支持和鼓励,而这周的总排名不偏不倚,恰好100名整。我想,这大概是某种巧合,更确切来说应该是一种激励。近些日,严酷寒冬似乎柔情了许多,有了那么几日的柔柔暖阳,而我希望可以把这份温暖也带给大家。

我将用粉丝的头像拼接出一幅圣诞树,正所谓,“千图成像,集万千之美”。

原文地址:千图成像!祝可爱的小伙伴们圣诞快乐_kimol君的博客-优快云博客

一、🎄圣诞树🎄

 

图片上传失败

​重试

该图的像素为6200x10250,将其局部放大后的效果为:

今天所用到的代码是比较通用的,只需要替换背景图和图片库即可打造属于你自己的专属图片。详情分析,客观您往下瞅瞅~

帅小伙!圣诞来袭,还不赶快用来表白一波,还在犹豫啥呢?

二、代码分析

1.头像爬取

通过爬虫将粉丝的头像下载到本地,具体分析大家可以参考我之前的博客【前方高能!看小伙是怎么表白粉丝的】,完整代码如下:

# -*- coding: utf-8 -*-
"""
Created on Sat Oct 17 12:27:33 2020

@author: kimol_love
"""

import requests

def get_fansInfo():
    '''
    获取粉丝相关信息
    '''
    url = 'https://me.youkuaiyun.com/api/relation/index?pageno=%d&pagesize=%d&relation_type=fans' # 接口地址
    cookies = {} # 优快云登陆后的cookies
    headers = {  # 请求头
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0',
        'Accept': 'application/json, text/plain, */*',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Referer': 'https://i.youkuaiyun.com/',
        'Origin': 'https://i.youkuaiyun.com',
        'Connection': 'keep-alive',
        'TE': 'Trailers',
    }
    # 获取粉丝总数
    res = requests.get(url%(1,10),headers=headers,cookies=cookies)
    res_json = res.json()
    N_fans = res_json['data']['data_all']
    print('一共有%d个粉丝'%N_fans)
    # 获取全部粉丝数据
    res = requests.get(url%(1,N_fans),headers=headers,cookies=cookies)
    res_json = res.json()
    return res_json

def download_avatar(username,url):
    '''
    下载用户头像
    '''
    savePath = './avatars' # 头像存储目录
    res = requests.get(url)
    with open('%s/%s.jpg'%(savePath,username),'wb') as f:
        f.write(res.content)
     

if __name__ == '__main__':
    fans = get_fansInfo()
    for f in fans['data']['list']:
        username = f['fans'] # 用户名
        url = f['avatar']    # 头像地址
        download_avatar(username,url)
        print('用户"%s"头像下载完成!'%username)

将头像下载完毕并去重,结果如下:

一共有2796张非重复图片,有了它们,我们便可以开始——搞事情!

2.千图成像

所谓千图成像就是用很多张图片拼接成一张完整的图片,它需要两个部分:一张背景图,一个图片库。根据背景图的结构用图片库中的图片来进行拼接,最终形成新的图片。

一种最简单直观的思路便是:遍历背景图中的每个像素点,并用图库中与之颜色最相近的图片粘贴在这个位置。

因此,我们首先需要计算每个图片的“平均颜色”,即图片像素点(R,G,B)的平均值,代码如下:

def compute_mean(imgPath):
    '''
    计算平均(R,G,B)
    '''
    img = Image.open(imgPath)
    img = img.convert('RGB')
    imgArray = np.array(img)
    R = np.mean(imgArray[:,:,0])
    G = np.mean(imgArray[:,:,1])
    B = np.mean(imgArray[:,:,2])
    return (R,G,B)

遍历图片库中的每张图片,并得到它们的平均距离,生成一个图片列表,以便后续的使用:

def get_imgList(imgDir):
    '''
    获取图片列表(图片目录及平均颜色)
    '''
    imgList = []
    for imgName in os.listdir(imgDir):
        path = imgDir+imgName
        color = compute_mean(path)
        imgList.append({'path':path,'RGB':color})
    return imgList

该列表的每个元素是一个字典,包括了path和RGB,分别表示图片的路径以及图片的平均颜色,如下:

在得到了图片的“平均颜色”后,便是比较背景图的像素点与它的相似性,这里采用了欧式距离:

def compute_distance(color1, color2):
    '''
    计算两张图的颜色差
    '''
    dis = 0
    for i in range(len(color1)):
        dis += (color1[i]-color2[i])**2
    dis = dis**0.5
    return dis

剩下的便是遍历背景图,并进行比较填充,代码如下:

def create_image(bgImg,imgDir,N=10,M=50):
    '''
    根据背景图,用头像填充出新图
    bgImg:背景图地址
    imgDir:头像目录
    N:背景图缩放的倍率
    M:头像的大小(MxM)
    '''
    # 获取图片列表
    imgList = get_imgList(imgDir)
    
    # 读取背景图
    bg = Image.open(bgImg)
    bg = bg.resize((bg.size[0]//N,bg.size[1]//N)) # 缩放
    bgArray = np.array(bg)
    width = bg.size[0]*M  # 新生成图片的宽度
    height = bg.size[1]*M # 新生成图片的高度
    
    # 创建空白的新图
    newImg = Image.new('RGB',(width,height))
    
    # 循环填充图
    for x in range(bgArray.shape[0]):
        for y in range(bgArray.shape[1]):
            ## 找到距离最小的图片
            minDis = 10000
            index = 0
            for img in imgList:
                dis = compute_distance(img['RGB'],bgArray[x][y])
                if dis < minDis:
                    index = img['path']
                    minDis = dis
            ## 填充
            tempImg = Image.open(index)
            tempImg = tempImg.resize((M,M))
            newImg.paste(tempImg,(y*M,x*M))
            print('(%d, %d)'%(x,y))
            
    # 保存图片
    newImg.save('千图成像.jpg')

调用它:

create_image('bg.jpg','./avatars(dr)/',5,50)

函数的输入有bgImg、imgDir、N、M,它们分别表示:

 

参数

含义

 

注:imgDir最后需要有目录连接符/,否则会报错;N是为了将背景图的尺寸进行调整压缩,否则容易因为像素点太多而执行缓慢。

最后,代码一Run,小图在手,简单的快乐,美滋滋~

写在最后

由于kimol君太想赶在圣诞前将这份礼物送出,所以代码以及文字略显仓促,还望大家见谅。

客观来说,该代码的执行效率并不高,特别是当N设置得较小(即背景图片像素点很多)或者图片库中的图片很多时。针对这个问题,也有很多优化方法,例如采用图片向量的方式对图片进行编码,进而比较等等。感兴趣的小伙伴可以参考这篇文章。

最后,提前祝最可爱的小伙伴们圣诞快乐🎅,愿我们聚于一图,焕尽万丈芒!另祝即将奔赴考研战场的小伙伴考的都会,会的都考!

我是kimol君,咋们下次再会~

 

后记

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

 

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程 本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。 阅读详情

相关推荐

ESP-CSI:使用ESP32进行CSI(信道状态信息)采集

使用esp32进行csi(信道状态信息)采集和处理

capsize的博客 8280

【Bootstrap】008-全局样式:图片

一、响应式图片 1、说明 在 Bootstrap 版本 3 中,通过为图片添加 .img-responsive 类可以让图片支持响应式布局。其实质是为图片设置了 max-width: 100%;、 height: auto; 和 display: block; 属性,从而让图片在其父元素中更好的缩放; 如果需要让使用了 .img-responsive 类的图片水平居中,请使用 .center-block 类,不要用 .text-center。 请参考助手类章节 了解更多关于 .center-block

訾博(ZiBo)的博客 401

Genesis物理引擎实战指南:轻量级确定性刚体仿真核心

刚体物理仿真作为机器人控制、嵌入式运动学验证和确定性游戏开发的基础技术,其核心在于数值稳定性、跨平台可复现性与约束求解精度。本文围绕线性互补问题(LCP)求解、半隐式欧拉积分和零依赖C++实现三大关键技术展开,解析如何在无GUI、低算力环境下构建可单步调试、帧级可控的确定性仿真系统。重点覆盖碰撞检测数学建模、关节局部坐标系绑定、质量-惯性张量一致性校验等工程落地关键点,适用于STM32、树莓派及教育实验场景。内容深度结合Genesis Physics Engine的源码实践,直击‘穿模’‘NaN’‘关节发软

ciya3282的博客 1589

WPS/Powerpoint导出高质量清晰图片

Powerpoint导出高质量清晰图片 符合SCI标准的科研绘图(.tif) 设置幻灯片大小与图片大小一致 文件-另存为-选择TIFF Tag 图像文件格式(*.tif)-保存-仅当前幻灯片 导出图片属性如下

weixin_43937460的博客 2万+

别再死磕NFP了!用Python+遗传算法搞定异形件自动排版(附完整代码)

本文介绍了如何利用Python和遗传算法实现异形件智能排版,解决传统NFP方法计算复杂的问题。通过Shapely库处理几何运算和DEAP库搭建遗传算法框架,结合模拟退火策略避免局部最优,显著提升材料利用率。附完整代码和优化技巧,适用于服装裁剪、金属加工等行业。

weixin_26965807的博客 235

PPT另存为图片分辨率太低,设置高分辨率(300dpi)

问题: PPT另存为图片分辨率太低 解决方案 1、下载设置脚本(推荐) 参考:如何提高PowerPoint另存为图像的分辨率? - 木雷的文章 - 知乎 https://zhuanlan.zhihu.com/p/23555929 下载链接:PPT_DPI设置脚本.bat 2、使用cmd程序 windows搜索CMD,打开命令提示符,输入下面代码(设置另存为图片300dpi)。 reg add HKCU\Software\Microsoft\Office\16.0\PowerPoint\Op

小琳子要开心呀 3万+

STM32F103(二十三)通用同步异步收发器(USART)

学习板:STM32F103ZET6 往期博客: STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置 STM32F103五分钟入门系列(三)GPIO的常用库函数使用方法总结+一个网络上的误区 STM32F103五分钟入门系列(四)蜂鸣器实验(库函数+寄存器) STM32F103五分钟入门系列(五)按键实验(库函数+寄存器) STM32F103五分钟入门系列(六)时钟框图+相关寄存器

Curnane0_0的博客 1019

如何将wps中的表格转为图片,并设置较高的dpi

首先选中表格 然后选中复制,打开一个新的PPT或者excel,右键选择 ”粘贴为图片“ 然后复制图片到visio中,然后选 文件-另存为-浏览(选择保存路径),然后选择要保存的格式 点击保存后弹出输出设置对话框,可以自定义dpi的大小,然后确定即可。 这也更改dpi不会失真。 ...

qq_32182397的博客 8847

042_小驰私房菜_MTK Camera yuv旋转90度方案

做旋转可以在app层接收到数据后,自行做旋转,也可以在hal层,针对yuv format这路流进行旋转。那我们做旋转也可以采用类似的方式。预览和录像是正常的,这个是因为预览和录像有方向相关属性可以调整,系统会根据摄像头mount的角度已经当前设备的方向,进行对应的旋转。这个下面这个文件,可以修改摄像头的mount角度。,可以看到前摄的Orientation是270,所以原始出图是做了90度的旋转。这个方案,思路就是在配流信息中,将rotation信息进行修改。注:本文章所用权归:小驰成长圈,禁止转载宣传!

587

3.PCIe协议分析1-预备知识点

PCIE协议分析1主要讲一下四方面: PCI-E配置空间 PCI-E地址映射 PCI-E Bar空间 PCI-E层级结构详谈 (1)PCIE配置空间 我们过来学习PCIE的同学应该都接触各种类型的功能芯片吧,这些功能芯片连接在电路里面我们可以认为它是一个外部设备,这些设备里面有自己独有的寄存器区域,比如SDRAM里面的ID寄存器或者其他配置寄存器。好的,其实我们PCIE板卡也相当...

一个早起的程序员 4144

wps的ppt输出高清图片的方法(论文创建高清图片)

wps中ppt输出高清图片

weixin_44151034的博客 3万+

基于Costas环的载波同步实现及Matlab仿真

其中,第一个相位环接收带噪声的待同步载波,并产生一个相位误差信号,这个误差信号再通过第二个相位环进行反馈控制,使得两个相位环的相位差保持为90度,最终输出同步载波信号。接下来,我们可以编写Costas环的仿真程序,并将上面生成的信号输入到Costas环中进行同步,最终输出同步后的载波信号。综上所述,本文介绍了如何使用Matlab实现基于Costas环的载波同步,并给出相应的源代码。上述代码中,我们初始化了Costas环的各个参数,然后通过循环迭代实现了相位估计和相位误差控制,最终输出了同步后的载波信号。

2301_78484069的博客 1048

千图成像_千图成像!祝可爱的小伙伴们圣诞快乐!给女朋友一个惊喜吧

前言当走上街头时能隐约察觉到多了些许“红白绿”的色彩,那是:圣诞老人、雪花❄️、圣诞树。弥红灯闪烁,各类促销活动海报令郎满目。没有错,圣诞节快来了~从写博客开始,一路上得到了不少小伙伴的支持和鼓励,而这周的总排名不偏不倚,恰好100名整。我想,这大概是某种巧合,更确切来说应该是一种激励。近些日,严酷寒冬似乎柔情了许多,有了那么几日的柔柔暖阳,而我希望可以把这份温暖也带给大家。我将用粉丝的头像拼接出...

weixin_39992462的博客 57

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

圣诞快乐,手绘CSS圣诞老人,DIY浪漫圣诞礼物!

随着圣诞节的临近,街头巷尾都弥漫着浓浓的节日氛围。这不仅仅是一个普通的节日,更是一年中最适合表达爱意的时刻。今晚的平安夜,你是否想为你的女朋友准备一份特别的礼物?如果你是一位编程爱好者,那么我有一个非常独特且富有创意的想法——用CSS手绘一个可爱的圣诞老人!可能你会问,为什么要选择CSS绘画?其实,CSS不仅仅是前端开发的基石,它还有着无限的创造潜力。通过精心的设计和编程,我们可以用CSS创造出各...

前端达人 7625

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

讯飞输入法pad版x86_独家解密讯飞输入法圣诞密语功能:节日祝福语原来还能这么玩...

生活总是需要一点惊喜的,尤其是对正在热恋的情侣。马上到来的圣诞节就是最好的检验时机,男女双方互诉衷情、交换礼物是年轻情侣之间最常见的事,但对“有所期待”的人来说,简单的一句“圣诞快乐,我爱你”就足够了吗?有时候沟通也是需要“仪式感”的。通过让对方产生“疑问”,适当地调动对方的情绪参与到话题中,营造更温情的局面,也是为圣诞节增加惊喜的秘诀之一。emoji表情对话是很多人会选择的方式,但如果是一条全部...

weixin_29890403的博客 422

61岁前港姐冠军近况曝光,昔日旧照成热话。

虽说是港姐冠军,尤其放在上个世纪的香港,按理说应该是星途一片坦荡,然而梁韵蕊在娱乐圈走得并没有想象中的那么顺利,星途更远不及同届亚军、季军邝美云和寇鸿萍,甚至是同届落选港姐翁美玲。在影视领域上,梁韵蕊演的多半是小角色,像1984年贺岁喜剧片《圣诞快乐》,在这部汇聚了上世纪香港巨星的电影里,梁韵蕊饰演的却是丑角,一个带钢牙套的女生,而且戏份不多。你影到佢最靓的时候!90年代,在由刘嘉玲领衔主演的《皇家女将》中,梁韵蕊继续打酱油,即使搭档梁家辉,受限于几乎可以忽略不计的戏份,并未给大众留下深刻的印象。

weixin_39752502的博客 887

网络聊天术语大全 (外二篇)

现在不会上网的叫文盲, 上网不知道这些术语的叫菜鸟。---大虾 (一)、基本篇人称类:偶:我的意思MM:妹妹GG:哥哥JJ:姐姐DD:弟弟GF:女朋友BF:男朋友银:人PLMM:漂亮美眉(PiaoLiangMeiMei)PPMM:漂亮美眉的演化版——漂漂美眉的拼音缩写(PiaoPiaoMeiMei)美眉:妹妹.小P孩儿:小屁孩子 SL :色狼犬科 :追逐女生,尤

陶向明的个人空间 1万+

用python代码做个圣诞树,送给心爱的她

心思快要圣诞节了,就给我家小可爱做个一颗只属于她的圣诞树,希望她会喜欢。在此分享在这里,希望大家也可以借鉴借鉴,送给心爱的她 import turtle as t import random # 爱心函数 # 将爱心分为两个半圆与一个正方形 # r为半圆半径,l = 2r为正方形边长 # 调整半径即可调整爱心大小 def loving_heart(r): l = 2 * r t.left(45) t.forward(l) t.circle(r, 180) t.

weixin_51347473的博客 1356

PPT如何保存高分辨率高清jpg图片, 三种简单方法,无需其他软件辅助

方法1. 只更改ppt页面大小 先分析下默认配置: ppt 默认另存为 jpg 格式时, 分辨率是 96 dpi,即 96/2.54 = 38 dots/cm 默认 4:3 页面大小是10.0 x 7.5 inches (25.4x19 cm),所以输出 jpg 像素是 960 * 720 默认16:9 页面大小是13.3 x 7.5 inches (33.9x19 cm),所以输出 jpg像素是 1280 * 720 实际操作,把默认页面大小放大。以4:3为例,将默认的25.4x19 cm页面

hello_earth616的博客 16万+

WPS中图片缩小保存后再打开不清晰

在wps中,截图进去一张较大的图片之后,为了节省空间我们将他缩小准备需要查阅时预览查看,保存之后再次打开发现图片被压缩清晰度大大降低

no___good的博客 6455

将PPT的图保持高分辨率导入到Word / WPS中 + 保存为清晰的PDF

1、将PPT中画好的图组合在一起,选择组合后的图复制(Ctrl+c)2、在Word中,选中左上角的粘贴选项--->选择性粘贴。WPS选择元文件 / Word选择增强型图元文件。

Drug discovery 1万+

使用WPS Office模糊处理图片-可用作浏览器背景

3、将插入的矩形拉满整张图片(是图片不是整个ppt页面),鼠标放在矩形上,单击右键,在菜单中选择 设置对象格式,就出现右边红色方框的属性。1、打开WPS Office,新建一个空白PPT,或者右键-新建-PPT演示文稿。4、在填充中选择渐变填充,线条中选择无线条,③中留两个就好了。7、组合图片:按Ctrl+A组合键全选,点击组合的图标。2、将你的图片插入到空白页上,点击 插入-形状-矩形。8、在图片位置里 右键-另存为图片。5、渐变样式选择 左上到右下。修改文件名和文件类型,单击保存。

凡尘-追梦者 4452

75行代码 完美实现图片完整展示 flex 横向瀑布流布局

布局特点 代码简单 图片完整展示,不会被裁切 以图片异步加载完毕的顺序渲染图片,防止页面闪动 最后一行图片过少时,图片不会被放大得很大 在线预览 https://haolang.github.io/web/demo/500px/ 效果如下 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title>

haolangtaiye的博客 2731

wpsppt怎样让图片模糊_「图片素材」 70幅“道路公路”的高品质图片

路的尽头,仍然有路,只要你愿意走这周公子给大家分享的素材是70幅关于“路”的画面,在PPT中也是属于比较好用的一类素材,可以模糊代指很多含义,你是否也曾用过呢?比如说“方向、未来、前行”等等,能找到一张恰当得体的图片,的确会给你想传递的信息增色不少,毕竟图片在很多场合都是优于文字的。我个人觉得普遍定义的实用型图片都不会太有美感(当然这美感是公子的主观喜好),但又不能忽视这类素材的重要性!所以我只能...

weixin_32506617的博客 1497
上一篇: 教你用Python画了一棵圣诞树!圣诞节给女朋友制作个小惊喜
下一篇: Python爬虫以及数据可视化分析!
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值