The code to read tif files in a folder and convert them into jpeg automatically (with the same or reduced quality, and with reduced size).
See here for a pretty good handbook of Python Imaging Library (PIL).
import os from PIL import Image current_path = os.getcwd() for root, dirs, files in os.walk(current_path, topdown=False): for name in files: print(os.path.join(root, name)) #if os.path.splitext(os.path.join(root, name))[1].lower() == ".tiff": if os.path.splitext(os.path.join(root, name))[1].lower() == ".tif": if os.path.isfile(os.path.splitext(os.path.join(root, name))[0] + ".jpg"): print "A jpeg file already exists for %s" % name # If a jpeg with the name does *NOT* exist, covert one from the tif. else: outputfile = os.path.splitext(os.path.join(root, name))[0] + ".jpg" try: im = Image.open(os.path.join(root, name)) print "Converting jpeg for %s" % name im.thumbnail(im.size) im.save(outputfile, "JPEG", quality=100) except Exception, e: print e
The above code will covert tif files to a jpg file with the same or reduced (change quality number less then 100 to reduce the quality) quality (file size), but the resulted image will keep the same size (the height and width of the image).
To covert tif file to a reduce size, use attribute size and method resize provided by PIL.
Note that in resize() method, be sure to use ANTIALIAS filter (ANTIALIAS is a high-quality downsampling filter) unless speed is much more important than quality. The bilinear and bicubic filters in the current version of PIL are not well-suited for large downsampling ratios (e.g. when creating thumbnails).
im = Image.open("my_image.jpg") size =im.size # get the size of the input image ratio = 0.9 # reduced the size to 90% of the input image reduced_size = int(size[0] * ratio), int(size[1] * ratio) im_resized = im.resize(reduced_size, Image.ANTIALIAS) im_resized.save("my_image_resized.jpg", "JPEG") #im_resized.save(outputfile, "JPEG", quality=100) # uncomment this line if you want to reduce image size without quality loss. #im_resized.save(outputfile, "JPEG", quality=100, optimize=True) # uncomment this line if you want to optimize the result image.
Code snippet to save as different dpi
from PIL import Image im = Image.open("test.jpg") im.save("test_600.jpg", dpi=(600,600) )
Referenced materials:
The Image Module (resize, size, save)
os.path document
Using Python to Reduce JPEG and PNG Image File Sizes Without Loss of Quality (Jan 3, 2015)
http://stackoverflow.com/questions/28870504/converting-tiff-to-jpeg-in-python