summaryrefslogtreecommitdiffstats
path: root/nikola/plugins/task/scale_images.py
diff options
context:
space:
mode:
authorLibravatarAgustin Henze <tin@sluc.org.ar>2015-07-08 07:35:02 -0300
committerLibravatarAgustin Henze <tin@sluc.org.ar>2015-07-08 07:35:02 -0300
commitb0b24795b24ee6809397fbbadf42f31f310a219f (patch)
tree46d05bb47460b4ec679211717c4ab07414b80d9c /nikola/plugins/task/scale_images.py
parent5ec02211214350ee558fd9f6bb052264fd24f75e (diff)
Imported Upstream version 7.6.0upstream/7.6.0
Diffstat (limited to 'nikola/plugins/task/scale_images.py')
-rw-r--r--nikola/plugins/task/scale_images.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/nikola/plugins/task/scale_images.py b/nikola/plugins/task/scale_images.py
new file mode 100644
index 0000000..f97027e
--- /dev/null
+++ b/nikola/plugins/task/scale_images.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+
+# Copyright © 2014-2015 Pelle Nilsson and others.
+
+# Permission is hereby granted, free of charge, to any
+# person obtaining a copy of this software and associated
+# documentation files (the "Software"), to deal in the
+# Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the
+# Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice
+# shall be included in all copies or substantial portions of
+# the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+import os
+
+from nikola.plugin_categories import Task
+from nikola.image_processing import ImageProcessor
+from nikola import utils
+
+
+class ScaleImage(Task, ImageProcessor):
+ """Copy static files into the output folder."""
+
+ name = "scale_images"
+
+ def set_site(self, site):
+ self.logger = utils.get_logger('scale_images', site.loghandlers)
+ return super(ScaleImage, self).set_site(site)
+
+ def process_tree(self, src, dst):
+ """Processes all images in a src tree and put the (possibly) rescaled
+ images in the dst folder."""
+ ignore = set(['.svn'])
+ base_len = len(src.split(os.sep))
+ for root, dirs, files in os.walk(src, followlinks=True):
+ root_parts = root.split(os.sep)
+ if set(root_parts) & ignore:
+ continue
+ dst_dir = os.path.join(dst, *root_parts[base_len:])
+ utils.makedirs(dst_dir)
+ for src_name in files:
+ if src_name in ('.DS_Store', 'Thumbs.db'):
+ continue
+ if (not src_name.lower().endswith(tuple(self.image_ext_list)) and not src_name.upper().endswith(tuple(self.image_ext_list))):
+ continue
+ dst_file = os.path.join(dst_dir, src_name)
+ src_file = os.path.join(root, src_name)
+ thumb_file = '.thumbnail'.join(os.path.splitext(dst_file))
+ yield {
+ 'name': dst_file,
+ 'file_dep': [src_file],
+ 'targets': [dst_file, thumb_file],
+ 'actions': [(self.process_image, (src_file, dst_file, thumb_file))],
+ 'clean': True,
+ }
+
+ def process_image(self, src, dst, thumb):
+ self.resize_image(src, dst, self.kw['max_image_size'], False)
+ self.resize_image(src, thumb, self.kw['image_thumbnail_size'], False)
+
+ def gen_tasks(self):
+ """Copy static files into the output folder."""
+
+ self.kw = {
+ 'image_thumbnail_size': self.site.config['IMAGE_THUMBNAIL_SIZE'],
+ 'max_image_size': self.site.config['MAX_IMAGE_SIZE'],
+ 'image_folders': self.site.config['IMAGE_FOLDERS'],
+ 'output_folder': self.site.config['OUTPUT_FOLDER'],
+ 'filters': self.site.config['FILTERS'],
+ }
+
+ self.image_ext_list = self.image_ext_list_builtin
+ self.image_ext_list.extend(self.site.config.get('EXTRA_IMAGE_EXTENSIONS', []))
+
+ yield self.group_task()
+ for src in self.kw['image_folders']:
+ dst = self.kw['output_folder']
+ filters = self.kw['filters']
+ real_dst = os.path.join(dst, self.kw['image_folders'][src])
+ for task in self.process_tree(src, real_dst):
+ task['basename'] = self.name
+ task['uptodate'] = [utils.config_changed(self.kw)]
+ yield utils.apply_filters(task, filters)