python3 图片横向合并

发布时间:2019-10-16 17:30:06编辑:auto阅读(2328)

    安装必要库

    pip install Pillow

    代码

    import os
    import glob
    import time
    from sys import argv
    from PIL import Image
    
    # 多少张图片合成一张
    merge_count = 2
    merge_queue = []
    min_width = 9999999
    min_height = 99999999
    
    if len(argv) <= 1:
        exit()
    
    if not os.path.exists("output"):
        os.makedirs("output")
    
    for _file in glob.glob(os.path.join(argv[1], "*.jpg")):
        img = Image.open(_file)
        if img.width > img.height:
            continue
        min_width = min(min_width, img.width)
        min_height = min(min_height, img.height)
        if len(merge_queue)+1 == merge_count:
            # merge image
            target = Image.new('RGB', (min_width*merge_count*merge_count, min_height))
            if abs(img.height - min_height) > 100:
                img = img.resize((int((img.width / img.height) * min_height), min_height))
            target.paste(img, (0,0))
            _tmpWidth = img.width
            for _tmpFile in merge_queue:
                _tmpImage = Image.open(_tmpFile)
                if abs(_tmpImage.height - min_height) > 100:
                    _tmpImage = _tmpImage.resize((int((_tmpImage.width / _tmpImage.height) * min_height), min_height))
                target.paste(_tmpImage, (_tmpWidth, 0))
                _tmpWidth += _tmpImage.width
                _tmpImage.close()
            target = target.crop((0, 0, _tmpWidth, min_height))
            target.save("output/%d.jpg" % int(time.time()*1000))
            
            # reset count
            merge_queue = []
            min_width = 999999
            min_height = 999999
        else:
            merge_queue.append(img.filename)
        img.close()

关键字