如何用 Python 创建一张由许多小图片组成的大图片
好吧,我承认我语文不好,实在想不出来如何描述,也不知道专业术语
图片如下
http://zen.crosswarm.com/wp-content/uploads/2011/09/1306837663AjAJ.jpg
放大可以看到这张图片是由许多张小图片组合成的
不知道如何制作类似的图片
如何用 Python 创建一张由许多小图片组成的大图片
5 回复
感觉可以先划格子,然后算格子里面像素的方差,如果太大就接着划格子,直到方差小于某个阈值,然后在图片库里面找一张平均颜色(众数)最相近的图片填进那个格子…
不知道这样做效果会如何…
用Python把一堆小图拼成一张大图,用PIL库(Pillow)最直接。下面是一个完整的例子,假设你要把一堆尺寸相同的小图片拼成一个网格状的大图。
from PIL import Image
import os
def create_collage(image_paths, cols, output_path):
"""
将小图片拼贴成网格状大图
Args:
image_paths: 小图片路径列表
cols: 网格列数
output_path: 输出大图路径
"""
if not image_paths:
print("没有图片可处理")
return
# 打开第一张图片获取尺寸
with Image.open(image_paths[0]) as img:
img_width, img_height = img.size
# 计算网格行数
rows = (len(image_paths) + cols - 1) // cols
# 创建新的大图
collage_width = cols * img_width
collage_height = rows * img_height
collage = Image.new('RGB', (collage_width, collage_height))
# 将小图粘贴到大图上
for index, img_path in enumerate(image_paths):
row = index // cols
col = index % cols
with Image.open(img_path) as img:
# 确保所有图片尺寸一致,如果不一致则调整
if img.size != (img_width, img_height):
img = img.resize((img_width, img_height))
# 计算粘贴位置
x = col * img_width
y = row * img_height
collage.paste(img, (x, y))
# 保存结果
collage.save(output_path)
print(f"拼贴图已保存到: {output_path}")
# 使用示例
if __name__ == "__main__":
# 获取当前目录下所有jpg图片
image_files = [f for f in os.listdir('.') if f.lower().endswith(('.jpg', '.jpeg', '.png'))]
# 设置每行显示4张小图
create_collage(image_files, cols=4, output_path='collage.jpg')
这个脚本的核心逻辑是:先确定网格的列数,然后根据图片总数计算行数,最后按顺序把每张小图粘贴到对应的网格位置上。如果小图尺寸不一致,代码会自动调整到统一尺寸。
要运行这个脚本,先安装Pillow库:pip install Pillow。把脚本和你的小图片放在同一个目录下,运行后就会生成一个名为collage.jpg的拼贴大图。
你可以调整cols参数来控制每行显示多少张小图。如果图片数量不是列数的整数倍,最后一行会留空。
总结:用Pillow的网格粘贴法最直接。
关键词: python photomosaic
轮子一大堆
pillow 自己写
pil

