Search code examples
imagepython-imaging-libraryfilesize

PIL output picture bigger than input


I am currently working on an automatic script for changing contrast on all the pictures inside a folder, using PIL (python). The problem is each output picture is bigger than input one... Here is my script:

from PIL import Image, ImageEnhance
import piexif

path="C:/User/pictures/"
all_files=["picture1.jpg", "picture2.jpg", "picture3.jpg"]

for i in range(len(all_files)):

    im_path=all_files[i]
    
    
    im = Image.open(path+im_path)
    
    
    #load exif data
    exif_dict = piexif.load(im.info['exif'])
    exif_bytes = piexif.dump(exif_dict)
    
    dpi = im.info["dpi"]
    
    #image brightness enhancer
    contraster = ImageEnhance.Contrast(im)
    
    im_output = contraster.enhance(factor)
    im_output.save(new_path+im_path, format="JPEG", quality=100, dpi=dpi, exif=exif_bytes, subsampling=0)

For example, my incoming jpg picture was 8.08Mo, and my new one is 15.8Mo, even if I chose a 0% change of contrast...

Thanks a for answering, have a nice week-end.


Solution

  • You have specified quality=100 against the recommendations of the library authors.

    The image quality, on a scale from 0 (worst) to 95 (best). The default is 75. Values above 95 should be avoided; 100 disables portions of the JPEG compression algorithm, and results in large files with hardly any gain in image quality.