From 25a22c1a3885cc082bcf7aa74057f39592cbb63b Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 23 May 2012 01:02:37 +0200 Subject: [PATCH] images - split the image action from the Gallery class --- sigal/image.py | 103 ++++++++++++++++++++++++++++--------------------- 1 file changed, 60 insertions(+), 43 deletions(-) diff --git a/sigal/image.py b/sigal/image.py index e774930..990a950 100644 --- a/sigal/image.py +++ b/sigal/image.py @@ -24,11 +24,60 @@ Prepare images: resize images, and create thumbnails with some options import os -from PIL import Image, ImageDraw +from PIL import Image as PImage +from PIL import ImageDraw as PImageDraw from shutil import copy2 DESCRIPTION_FILE = "album_description" + +class Image: + "Handle Images: resize, thumbnail, ..." + + def __init__(self, filename): + self.filename = filename + self.imgname = os.path.split(filename)[1] + self.img = PImage.open(filename) + + def save(self, filename, quality=90): + self.img.save(filename, quality=quality) + + def resize(self, size): + "resize image" + if self.img.size[0] > self.img.size[1]: + self.img = self.img.resize(size, PImage.ANTIALIAS) + else: + self.img = self.img.resize([size[1], size[0]], PImage.ANTIALIAS) + + def add_copyright(self, text): + "add copyright to image" + draw = PImageDraw.Draw(self.img) + draw.text((5, self.img.size[1]-15), text) + + def thumbnail(self, filename, size, square=False, quality=90): + "create thumbnail image for img" + + nx, ny = self.img.size + + if square: + if nx > ny: + offset = (nx - ny)/2 + box = (offset, 0, nx-offset, ny) + else: + offset = (ny - nx)/2 + box = (0, offset, nx, ny-offset) + + self.img = self.img.crop(box) + thumb_size = [size[0], size[0]] + elif nx > ny: + thumb_size = size + else: + thumb_size = [size[1], size[0]] + + self.img.thumbnail(thumb_size, PImage.ANTIALIAS) + self.img.save(filename, quality=quality) + + class Gallery: "Prepare images" @@ -92,6 +141,7 @@ class Gallery: filename = os.path.split(f)[1] im_name = os.path.join(img_dir, filename) + thumb_name = os.path.join(thumb_dir, self.settings['thumb_prefix'] + filename) @@ -101,59 +151,26 @@ class Gallery: continue print "%s" % filename - im = Image.open(f) + img = Image(filename) if self.settings['big_img']: - im.save(os.path.join(bigimg_dir, filename), - quality=self.settings['jpg_quality']) + img.save(os.path.join(bigimg_dir, filename), + quality=self.settings['jpg_quality']) - # resize image - if im.size[0] > im.size[1]: - im_resized = im.resize(self.settings['img_size'], - Image.ANTIALIAS) - else: - im_resized = im.resize([self.settings['img_size'][1], - self.settings['img_size'][0]], - Image.ANTIALIAS) + img.resize(self.settings['img_size']) if self.settings['copyright']: - self.add_copyright(im_resized) + img.add_copyright(self.settings['copyright']) - # save - im_resized.save(im_name, quality=self.settings['jpg_quality']) + img.save(im_name, quality=self.settings['jpg_quality']) - # create thumbnail - self.make_thumb(im, thumb_name) + img.thumbnail(thumb_name, self.settings['thumb_size'], + square=self.settings['square_thumb'], + quality=self.settings['jpg_quality']) if self.settings['exif']: self.copy_exif(f, im_name) - def make_thumb(self, img, thumb_name): - "create thumbnail image for img" - if self.settings['square_thumb']: - if img.size[0] > img.size[1]: - offset = (img.size[0] - img.size[1])/2 - box = (offset, 0, img.size[0]-offset, img.size[1]) - else: - offset = (img.size[1] - img.size[0])/2 - box = (0, offset, img.size[0], img.size[1]-offset) - - img = img.crop(box) - thumb_size = [self.settings['thumb_size'][0], - self.settings['thumb_size'][0]] - elif img.size[0] > img.size[1]: - thumb_size = self.settings['thumb_size'] - else: - thumb_size = [self.settings['thumb_size'][1], - self.settings['thumb_size'][0]] - - img.thumbnail(thumb_size, Image.ANTIALIAS) - img.save(thumb_name, quality=self.settings['jpg_quality']) - - def add_copyright(self, img): - "add copyright to image" - draw = ImageDraw.Draw(img) - draw.text((5, img.size[1]-15), self.settings['copyright']) def copy_exif(self, srcfile, dstfile): "copy exif metadatas from src to dest images"