Saving images

In Willow there are separate save operations for each image format:

  • save_as_jpeg()

  • save_as_png()

  • save_as_gif()

  • save_as_webp()

  • save_as_svg()

  • save_as_heic()

  • save_as_avif()

  • save_as_ico()

All three take one positional argument, the file-like object to write the image data to.

For example, to save an image as a PNG file:

with open('out.png', 'wb') as f:

Changing the quality setting

save_as_jpeg() and save_as_webp() takes a quality keyword argument, which is a number between 1 and 100. It defaults to 85 for save_as_jpeg() and 80 for save_as_webp(). Decreasing this number will decrease the output file size at the cost of losing image quality.

For example, to save an image with low quality:

with open('low_quality.jpg', 'wb') as f:
    i.save_as_jpeg(f, quality=40)

Progressive JPEGs

By default, JPEG’s are saved in the same format as their source file but you can force Willow to always save a “progressive” JPEG file by setting the progressive keyword argument to True:

with open('progressive.jpg', 'wb') as f:
    i.save_as_jpeg(f, progressive=True)

Lossless AVIF, HEIC and WebP

You can encode the image to AVIF, HEIC (Pillow-only) and WebP without any loss by setting the lossless keyword argument to True:

with open('lossless.avif', 'wb') as f:
    i.save_as_avif(f, lossless=True)

with open('lossless.heic', 'wb') as f:
    i.save_as_heic(f, lossless=True)

with open('lossless.webp', 'wb') as f:
    i.save_as_webp(f, lossless=True)

Image optimization

save_as_jpeg() and save_as_png() both take an optimize keyword that when set to true, will output an optimized image.

with open('optimized.jpg', 'wb') as f:
    i.save_as_jpeg(f, optimize=True)

This feature is currently only supported in the Pillow backend, if you use Wand this argument will be ignored.