본문 바로가기
언어/Python

Python 크기 변경하여 사진 붙이기 , 옆에 붙이기 , 아래 붙이기

by darkdevilness 2017. 8. 5.
728x90

Paste_Image.py

Python 3.6 에서 여러 사진을 옆으로 또는 아래로 붙이는 방법을 확인했다. 

OpenCV 기능도 있지만  PIL  image 를 사용했다. 

인터넷에 설치하는 방법은  나와 있으므로  잘 알아 보시길 바란다.

코드는 아래와 같으며  사진 크기 를 가장 작은 사진을 기준으로   출력 이미지를 원하는 값으로 변경하여 저장함. 

사진은  해당 폴터 에서   img 폴더에 있는 사진을 가져 온다. ( 코드 해석하면  읽어올 사진 위치와 저장할 사진위치  나옵니다. ) 

code ........



'''

Created on 2017. 7. 21.


@author: bsyim

'''

import glob

from PIL import Image



def CalculateSize(files):

    size_x=[]

    size_y=[]

    

    for file in files:

        image =Image.open(file)

        size_x.append(image.size[0])

        size_y.append(image.size[1])

    #print (size_x)

    #print (size_y)

    

    x_min = min(size_x)

    y_min = min(size_y) 

     

    total_x_size = x_min * len(files)

    total_y_size = y_min * len(files)

    

    #print("x_min:", x_min)

    #print("y_min:", y_min)

    #print("total_x_size",total_x_size)

    #print("total_y_size",total_y_size)

    

    return x_min,y_min,total_x_size,total_y_size


def ResizeTomin(files,x_min,y_min,x_size,y_size):

    file_list=[]

    for file in files:

        image = Image.open(file)

        resized_file = image.resize((x_min,y_min))

        file_list.append(resized_file)

        #print(resized_file.size)

        #resized_file.show()

        #resized_file.close()

        

    return file_list, x_size, y_size,x_min, y_min

def ResizeTomax(files,x_min,y_min,x_size,y_size):

    file_list=[]

    for file in files:

        image = Image.open(file)

        resized_file = image.resize((x_min,y_min))

        file_list.append(resized_file)

        #print(resized_file.size)

        #resized_file.show()

        #resized_file.close()

        

    return file_list, x_size, y_size,x_min, y_min

def ImageMerge(file_list,x_size,y_size,x_min,y_min):

    saveImageFileName="PasteImageMerge.jpg"

    new_image = Image.new("RGB",(x_size,y_min),(256,256,256))

    #print("X_size:", x_size)

    #print(len(file_list))

    

    for index in range(len(file_list)):

        area=((index * x_min),0,(x_min*(index+1)), y_min)

        new_image.paste(file_list[index],area) 

    #new_image.show()    

    new_image.save(saveImageFileName,"JPEG",quality=80, optimize=True, progressive=True)

    #new_image.save("result.png","PNG")

    #new_image.close()

    return new_image

    

#############################################################################

### Paste_Image(files)

### input [list]

### return from PIL import Image

#############################################################################     

def Paste_Image(files):

    x_min,y_min,x_size,y_size=CalculateSize(files)

    file_list,x_size,y_size,x_min,y_min = ResizeTomin(files,x_min,y_min,x_size,y_size)

    image=ImageMerge(file_list,x_size,y_size,x_min,y_min)     

    #image = Image.open(saveImageFileName)

    image.show()

    #image.close()

    return image


#############################################################################

### Main()

#############################################################################

if __name__ == '__main__':

    pass


target_dir="./img/"

files=glob.glob(target_dir+"*.*")

#print(len(files))

Paste_Image(files)


728x90