회사에서 운용중인 storage worker라는 데몬 프로세스에서는, AWS S3에 올라간 이미지를 다운로드하여 썸네일을 생성한 후 그 썸네일을 다시 S3로 업로드한다. 썸네일 이름은 원본 파일의 해시값인데, 그래서 업로드가 완료되면 해시값을 보고 S3에 이 썸네일 정보가 있는지를 판단한다. 썸네일이 있다면 그것을 보여주도록 구현되어 있어서 한번 업로드한 파일은 다시 썸네일 생성이 되지 않아 테스트를 하기 힘들다. 테스트를 위해 S3에서 지우기도 귀찮고 해서, 간단히 완전한 랜덤 이미지 파일을 생성할 수 있는 파이썬 스크립트를 작성하였다.

스크립트 파일의 기본 모양은 이 스크립트를 사용했다.

코드

#!/usr/bin/env python
 
import os
import time

import numpy
from PIL import Image
 
def create_image(width = 1920, height = 1080, num_of_images = 100):
    width = int(width)
    height = int(height)
    num_of_images = int(num_of_images)
 
    current = time.strftime("%Y%m%d%H%M%S")
    os.mkdir(current)
 
    for n in range(num_of_images):
        filename = '{0}/{0}_{1:03d}.jpg'.format(current, n)
        rgb_array = numpy.random.rand(height,width,3) * 255
        image = Image.fromarray(rgb_array.astype('uint8')).convert('RGB')
        image.save(filename)
 
def main(args):
    create_image(width = args[0], height = args[1], num_of_images = args[2])
    return 0
 
if __name__ == '__main__':
    import sys 
    status = main(sys.argv[1:])
    sys.exit(status)

설명

스크립트 파일은 argument가 없을 시 1920x1080의 이미지를 100장 생성하도록 하였다. 스크립트가 위치한 하위 디렉토리에 현재 시간으로 디렉토리를 만들고 그 아래에 순서대로 파일을 생성한다.

결과

001

1920x1080의 이미지를 생성했다.

002

640x480의 이미지를 생성했다.