|
@@ -0,0 +1,51 @@
|
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
|
+
|
|
|
|
+"""
|
|
|
|
+Optimized images (jpg and png)
|
|
|
|
+Assumes that jpegtran and optipng are isntalled on path.
|
|
|
|
+http://jpegclub.org/jpegtran/
|
|
|
|
+http://optipng.sourceforge.net/
|
|
|
|
+Copyright (c) 2012 Irfan Ahmad (http://i.com.pk)
|
|
|
|
+"""
|
|
|
|
+
|
|
|
|
+import logging
|
|
|
|
+import os
|
|
|
|
+from subprocess import call
|
|
|
|
+
|
|
|
|
+from pelican import signals
|
|
|
|
+
|
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
|
+
|
|
|
|
+# A list of file types with their respective commands
|
|
|
|
+COMMANDS = [
|
|
|
|
+ ('.jpg', 'jpegtran -copy none -optimize "{filename}" "{filename}"'),
|
|
|
|
+ ('.png', 'optipng "{filename}"'),
|
|
|
|
+]
|
|
|
|
+
|
|
|
|
+def optimize_images(pelican):
|
|
|
|
+ """
|
|
|
|
+ Optimized jpg and png images
|
|
|
|
+
|
|
|
|
+ :param pelican: The Pelican instance
|
|
|
|
+ """
|
|
|
|
+ for dirpath, _, filenames in os.walk(pelican.settings['OUTPUT_PATH']):
|
|
|
|
+ for name in filenames:
|
|
|
|
+ optimize(dirpath, name)
|
|
|
|
+
|
|
|
|
+def optimize(dirpath, filename):
|
|
|
|
+ """
|
|
|
|
+ Check if the name is a type of file that should be optimized.
|
|
|
|
+ And optimizes it if required.
|
|
|
|
+
|
|
|
|
+ :param dirpath: Path of the file to be optimzed
|
|
|
|
+ :param name: A file name to be optimized
|
|
|
|
+ """
|
|
|
|
+ for extension, command in COMMANDS:
|
|
|
|
+ if filename.endswith(extension):
|
|
|
|
+ filepath = os.path.join(dirpath, filename)
|
|
|
|
+ command = command.format(filename=filepath)
|
|
|
|
+ call(command, shell=True)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def register():
|
|
|
|
+ signals.finalized.connect(optimize_images)
|