如何用 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 自己写

回到顶部