jigsaw----字节跳动2019

2019-09-15  本文已影响0人  Adam_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() 

上一篇下一篇

猜你喜欢

热点阅读