Browse Source

Move JPEGOptim and OptiPNG plugins into the images module.

main
Elliott Sales de Andrade 12 years ago
committed by Lakshmi Vyasarajan
parent
commit
0b5eef9ead
2 changed files with 119 additions and 2 deletions
  1. +118
    -1
      hyde/ext/plugins/images.py
  2. +1
    -1
      hyde/tests/ext/test_optipng.py

+ 118
- 1
hyde/ext/plugins/images.py View File

@@ -5,12 +5,15 @@ Contains classes to handle images related things
# Requires PIL or pillow # Requires PIL or pillow
""" """


from hyde.plugin import Plugin
from hyde.plugin import CLTransformer, Plugin



import re import re
import glob import glob
import os import os


from fswrap import File

try: try:
from PIL import Image from PIL import Image
except ImportError: except ImportError:
@@ -333,3 +336,117 @@ class ImageThumbnailsPlugin(Plugin):
for resource in node.resources: for resource in node.resources:
if match_includes(resource.path): if match_includes(resource.path):
self.thumb(resource, dim1, dim2, prefix, crop_type, preserve_orientation) self.thumb(resource, dim1, dim2, prefix, crop_type, preserve_orientation)

class JPEGOptimPlugin(CLTransformer):
"""
The plugin class for JPEGOptim
"""

def __init__(self, site):
super(JPEGOptimPlugin, self).__init__(site)

@property
def plugin_name(self):
"""
The name of the plugin.
"""
return "jpegoptim"

def binary_resource_complete(self, resource):
"""
If the site is in development mode, just return.
Otherwise, run jpegoptim to compress the jpg file.
"""

try:
mode = self.site.config.mode
except AttributeError:
mode = "production"

if not resource.source_file.kind == 'jpg':
return

if mode.startswith('dev'):
self.logger.debug("Skipping jpegoptim in development mode.")
return

supported = [
"force",
"max=",
"strip-all",
"strip-com",
"strip-exif",
"strip-iptc",
"strip-icc",
]
target = File(self.site.config.deploy_root_path.child(
resource.relative_deploy_path))
jpegoptim = self.app
args = [unicode(jpegoptim)]
args.extend(self.process_args(supported))
args.extend(["-q", unicode(target)])
self.call_app(args)


class OptiPNGPlugin(CLTransformer):
"""
The plugin class for OptiPNG
"""

def __init__(self, site):
super(OptiPNGPlugin, self).__init__(site)

@property
def plugin_name(self):
"""
The name of the plugin.
"""
return "optipng"

def option_prefix(self, option):
return "-"

def binary_resource_complete(self, resource):
"""
If the site is in development mode, just return.
Otherwise, run optipng to compress the png file.
"""

try:
mode = self.site.config.mode
except AttributeError:
mode = "production"

if not resource.source_file.kind == 'png':
return

if mode.startswith('dev'):
self.logger.debug("Skipping optipng in development mode.")
return

supported = [
"o",
"fix",
"force",
"preserve",
"quiet",
"log",
"f",
"i",
"zc",
"zm",
"zs",
"zw",
"full",
"nb",
"nc",
"np",
"nz"
]
target = File(self.site.config.deploy_root_path.child(
resource.relative_deploy_path))
optipng = self.app
args = [unicode(optipng)]
args.extend(self.process_args(supported))
args.extend([unicode(target)])
self.call_app(args)

+ 1
- 1
hyde/tests/ext/test_optipng.py View File

@@ -31,7 +31,7 @@ class TestOptipng(object):
def test_can_execute_optipng(self): def test_can_execute_optipng(self):
s = Site(TEST_SITE) s = Site(TEST_SITE)
s.config.mode = "production" s.config.mode = "production"
s.config.plugins = ['hyde.ext.plugins.optipng.OptiPNGPlugin']
s.config.plugins = ['hyde.ext.plugins.images.OptiPNGPlugin']
s.config.optipng = Expando(dict(args=dict(quiet=""))) s.config.optipng = Expando(dict(args=dict(quiet="")))
source =File(TEST_SITE.child('content/media/images/hyde-lt-b.png')) source =File(TEST_SITE.child('content/media/images/hyde-lt-b.png'))
target = File(Folder(s.config.deploy_root_path).child('media/images/hyde-lt-b.png')) target = File(Folder(s.config.deploy_root_path).child('media/images/hyde-lt-b.png'))


Loading…
Cancel
Save