optimize_images.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # -*- coding: utf-8 -*-
  2. """
  3. Optimized images (jpg and png)
  4. Assumes that jpegtran and optipng are isntalled on path.
  5. http://jpegclub.org/jpegtran/
  6. http://optipng.sourceforge.net/
  7. Copyright (c) 2012 Irfan Ahmad (http://i.com.pk)
  8. """
  9. import logging
  10. import os
  11. from subprocess import call
  12. from pelican import signals
  13. logger = logging.getLogger(__name__)
  14. # A list of file types with their respective commands
  15. COMMANDS = [
  16. ('.jpg', 'jpegtran -copy none -optimize -outfile "{filename}" "{filename}"'),
  17. ('.png', 'optipng "{filename}"'),
  18. ]
  19. def optimize_images(pelican):
  20. """
  21. Optimized jpg and png images
  22. :param pelican: The Pelican instance
  23. """
  24. for dirpath, _, filenames in os.walk(pelican.settings['OUTPUT_PATH']):
  25. for name in filenames:
  26. optimize(dirpath, name)
  27. def optimize(dirpath, filename):
  28. """
  29. Check if the name is a type of file that should be optimized.
  30. And optimizes it if required.
  31. :param dirpath: Path of the file to be optimzed
  32. :param name: A file name to be optimized
  33. """
  34. for extension, command in COMMANDS:
  35. if filename.endswith(extension):
  36. filepath = os.path.join(dirpath, filename)
  37. command = command.format(filename=filepath)
  38. call(command, shell=True)
  39. def register():
  40. signals.finalized.connect(optimize_images)