안녕하세요. 이번 시간에는 Pillow의 thumbnail 함수에 대해서 알아보겠습니다. 말 그대로 큰 이미지의 썸네일을 보여주는 것이므로, 같은 비율로 축소한 그림을 보여줄 거라는 것을 알 수 있습니다. 보통 size 인자를 많이 쓸 것이니, 이 부분만 간단하게 보도록 하겠습니다.

 


 먼저, thumbnail은 이미지를 썸네일로 만듭니다. 해당 메소드는 주어진 크기보다 더 크게 사진을 만들지 않습니다. 예제 이미지 몇 개로 실험해 보겠습니다.

 

 먼저 test.jpeg입니다. 이 파일은 7724 x 5148 jpeg 형식의 10.5메가짜리 파일입니다. 

 

 먼저, test.jpg입니다. 이미지를 연 다음에, thumbnail의 size 인자에 (256, 256)으로 넘겼습니다. 썸네일화 시킨 결과를 test_0.jpeg로 저장하였습니다.

 

 그랬더니, 256x171 jpeg 파일로 변환되었습니다. 원본 대비 가로와 세로 픽셀이 1/30으로 줄어들었습니다. 어떻게 된 것인가? 5148을 256으로 줄이면, 같은 비율로 줄였을 때, 가로가 256보다는 큽니다. 따라서, 가로를 256으로 줄이게 됩니다. 7724를 256으로 나누면 30.1이 나옵니다. 비슷한 비율로 5148을 줄이면 171이 나오게 됩니다.

 

 

 이 경우에는 어떨까요? size를 가로는 256을 안 넘어가게, 세로는 128을 안 넘어가게 조정을 합니다. 가로 7724를 256으로 줄였습니다. 같은 비율로 세로를 줄이면 171이 나옵니다. 이는 128보다 큽니다. 따라서, 5148을 128로 줄입니다. 같은 비율로 가로를 줄이면 192가 나오게 됩니다.

 

 따라서 가로는 192, 세로는 128인 jpeg 파일이 나오게 됩니다.

 

 

 5760x3840 gif 파일을 (256,128)로 썸네일화 시켜 보겠습니다.

 

 그러면 192x128로 썸네일화가 되는 것을 볼 수 있습니다. 거의 같은 비율로 줄이고, 주어진 가로, 세로 size가 안 넘어가게끔 조정하고 있음을 알 수 있습니다.

 


 어떻게 동작하는지 간단하게 보도록 합시다. aspect는 x/y를 의미합니다. 저는 가로가 5760, 세로가 3840인 사진을 넘겼으므로, 이 값은 5760 / 3840인 1.5가 됩니다. 그런데 제가 요구한 값인 (256, 128)은 2이므로, 1.5보다는 크거나 같습니다. 따라서, 5760에 3840/128 = 30을 나눠야 합니다. 5760에서 30을 나누면 192가 됩니다.

 

 새로운 x와 y의 값은 192, 128임을 알 수 있어요.

 

 

 내부에서 resize를 호출합니다. 이 때 resize는 가로와 세로의 비율이 유지된 size를 넘겨받게 됩니다. 정리하면, pillow의 thumbnail은 2가지 일을 수행합니다. 같은 비율로 축소하는데, 주어진 가로와 세로 size보다 크지 않게 축소합니다. 예를 들어, 1000 by 1000짜리 이미지가 주어졌고, thumbnail의 size가 (10, 20)으로 주어진다면, 20 by 20으로 축소하는 게 아니라 10 by 10으로 축소합니다.