美文网首页
jigsaw----字节跳动2019

jigsaw----字节跳动2019

作者: Adam_0 | 来源:发表于2019-09-15 17:18 被阅读0次

    拿道题目,231张小图片。思路很明显,拼图。然而如何找到他们的顺序呢!?
    首先将231因式分解 231 = 3 * 7 * 11,猜测原图为11*21拼接的,想到这个图片的名字有点问题,是否是按文件名字排序的呢 ,写脚本拼图,全是乱的。然后又想到我在处理图片的时候,肯定有时间先后顺序。那就是根据文件修改日期了。(这里坑了我好久,win10文件修改查看排序后,python识别的文件顺序还是根据文件名称来的,emmmm)
    在脚本里加上文件按修改日期排序后函数。整个图片就出来了,真的舒服啊。


    final.jpg

    附脚本

    #-*- coding:utf-8 -*-
    import PIL.Image as Image
    import os
     
    IMAGES_PATH = 'D:\\Desktop\\pics\\'  
    IMAGES_FORMAT = ['.jpg', '.JPG']  
    IMAGE_SIZE = 256  
    IMAGE_ROW = 11  
    IMAGE_COLUMN = 21  
    IMAGE_SAVE_PATH = 'D:\\Desktop\\final.jpg'
    
    #按修改时间排序
    def sort_file_by_time(file_path):
        files = os.listdir(file_path)
        if not files:
            return
        else:
            files = sorted(files, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
            return files
    image_names = sort_file_by_time(IMAGES_PATH)
    print(image_names)
    
    
    # 简单的对于参数的设定和实际图片集的大小进行数量判断
    if len(image_names) < IMAGE_ROW * IMAGE_COLUMN:
        raise ValueError("不能合成图片!")
    
    
    def image_compose():
        to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE)) 
        for y in range(1, IMAGE_ROW + 1):
            for x in range(1, IMAGE_COLUMN + 1):
                from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
                    (IMAGE_SIZE, IMAGE_SIZE),Image.ANTIALIAS)
                to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
        return to_image.save(IMAGE_SAVE_PATH)
    image_compose() 
    
    

    相关文章

      网友评论

          本文标题:jigsaw----字节跳动2019

          本文链接:https://www.haomeiwen.com/subject/cxmbyctx.html