今天教大家怎么用python做出如上图所示的二维码图,像上图是由很多小图片拼成的。
首先需要准备一大摞图片,用于拼图,可以爬一爬lol皮肤什么的。
讲一下思路吧:
- 将背景图分成一定像素的很多小块,并且计算每一个小块的平均颜色;
- 将组成图片缩小到对应像素大小,也计算平均颜色。
- 计算得出与每一个小块颜色最接近的组成图片,添加到对应位置。
import cv2 # pip3 install opencv-python
import glob
import numpy as np # pip3 install numpy
from tqdm import tqdm # 显示进度条的作用 pip3 install tqdm
from itertools import product # 生成迭代器, 可以生成笛卡儿积(所谓笛卡儿积,最后有相关说明)
class Pic():
def __init__(self, targetpath, outputpath, sourcepath, blocksize):
self.targetpath = targetpath # 背景图
self.outputpath = outputpath # 输出成果图片
self.sourcepath = sourcepath # 组成图片
self.blocksize = blocksize # 每一块的像素(大小一般15左右看着办)
# 用于存放缩小后组成图片的列表
self.sourceimages = []
# 用于存放缩小后组成图片平均颜色的列表
self.avgcolors = []
# 缩小组成图片并计算平均颜色
def readSourceImage(self):