Tutorial Python kali ini saya akan memberikan contoh script yang saya buat belakangan ini untuk me-resize gambar. Karena gambar saya mencapai ratusan ribu dan dalam multiple folder , maka saya menulis script ini sesuai kebutuhan itu dan tentunya di tulis di Python dan bisa dijalankan di Terminal Ubuntu agar eksekusi nya sangat cepat.


Tutorial ini saya tulis juga di dzone  (http://dzone.com/snippets/resize-thousands-images-python) 5 menit sebelum tutorial disini saya tulis :D dan sekarang di popular snippets

Saya membuat script untuk me-resize ribuan gambar dalam  Python dan  berjalan di Linux (Ubuntu). Hal ini juga akan bekerja pada Windows saya kira.  ini dapat me-resize puluhan bahkan ratusan ribuan gambar (saya jalankan sebelumnya untuk> 50K gambar).


Misal kita punya gambar dalam struktur folder seperti ini: 

images

----  Tigers

-------------1_tigers.jpg

-------------2_tigers.jpg

-------------2_tigers.png

-------------n_tigers.jpg

---- Cats

-------------1_cats.jpg

-------------2_tcats.jpg

-------------2_cats.png

-------------n_cats.jpg

---- n

-------------1_n.jpg

-------------2_n.jpg

-------------3_n.png

-------------n_n.jpg

.............................

ans so on. 

Script nya 

import PIL
from PIL import Image
import os
import sys

def readf():

    try:
        input_dir  = str(sys.argv[1].rstrip('/'))  #path to img source folder
        img_size   = str(sys.argv[2])  #The image size (128, 256,etc)
        output_dir  = str(sys.argv[3].rstrip('/')) #output directory
        print "starting...."
        print "Colecting data from %s " % input_dir
        tclass = [ d for d in os.listdir( input_dir ) ]
        counter = 0
        strdc = ''
        hasil = []
        for x in tclass:
           list_dir =  os.path.join(input_dir, x )
           list_tuj = os.path.join(output_dir+'/', x+'/')
           if not os.path.exists(list_tuj):
                os.makedirs(list_tuj)
           if os.path.exists(list_tuj):
               for d in os.listdir(list_dir):
                   try:
                       img = Image.open(os.path.join(input_dir+'/'+x,d))
                       img = img.resize((int(img_size),int(img_size)),Image.ANTIALIAS)
                       fname,extension = os.path.splitext(d)
                       newfile = fname+extension
                       if extension != ".jpg" :
                           newfile = fname + ".jpg"
                       img.save(os.path.join(output_dir+'/'+x,newfile),"JPEG",quality=90)
                       print "Resizing file : %s - %s " % (x,d)
                       
                   except Exception,e:
                        print "Error resize file : %s - %s " % (x,d)
                        sys.exit(1)
                  
               counter +=1
        
    except Exception,e:
        print "Error, check Input directory etc : ", e
        sys.exit(1)

#run it
if __name__ == '__main__':     
    readf()

Jalankancript sebagai berikut : 

1. Buka terminal, lalu ketik command dibawah ini

2. python resizer.py {img source folder} {ukuran gambar} {folder tujuan}

   example : 

   python resizer.py /home/ubuntu/images/ 128 /home/ubuntu/new_images

3. Saat nya santai + minum kopi dan liat proses nya di terminal


Notes: 
1.  Install PIL image kalo belum ada
2. ANTIALIAS and quality=90 adalah agar gambar tidak kehilangan kualitas
3. Images akan di ubah ke format .jpg extension ( kita bisa ubah ini sesuai keinginan)