From 3a2ebee1970f57b213f166fe421db551e812ae83 Mon Sep 17 00:00:00 2001 From: Fredrik Unger Date: Tue, 31 Mar 2015 14:22:17 +0200 Subject: [PATCH] image: improve image handling, caption, resize Files being resized are marked as resized by treecutter. Captions are read from the xmp description. --- treecutter/image.py | 60 +++++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/treecutter/image.py b/treecutter/image.py index 7d01462..d031e26 100644 --- a/treecutter/image.py +++ b/treecutter/image.py @@ -4,7 +4,10 @@ from PIL import Image as PIL_Image from libxmp import consts from libxmp import XMPFiles from treecutter.tools import sizeof_fmt +import os +import subprocess +import errno class Image(): """Class representing an image""" @@ -12,41 +15,66 @@ class Image(): self._filename = filename self._format = {} + def filename(self): + return self._filename + def infostr(self): - image = PIL_Image.open(self._filename) - w,d = image.size - image.close() + im = PIL_Image.open(self._filename) + w,d = im.size + im.close() byte = os.path.getsize(self._filename) return "[%dx%d (%s)]" % (w,d,sizeof_fmt(byte)) - def resize(self,x,y): + def resize(self,x,y,pad=0): size = (x, y) outfile, ext = os.path.splitext(self._filename) - outfile = "%s.%dx%d.%s" % (outfile, size[0], size[1], ext) + outfile = "%s.%dx%d%s" % (outfile, size[0], size[1], ext) if not os.path.exists(outfile): - im = PIL_Image.open(infile) + im = PIL_Image.open(self._filename) im.thumbnail(size, PIL_Image.ANTIALIAS) - bg = PIL_Image.new('RGBA', size, (0, 0, 0, 0)) - bg.paste(im,((size[0]-im.size[0])/2, (size[1]-im.size[1])/2)) - im.save(outfile) + if pad: + bg = PIL_Image.new('RGBA', size, (0, 0, 0, 0)) + bg.paste(im,((size[0]-im.size[0])/2, (size[1]-im.size[1])/2)) + bg.save(outfile) + else: + im.save(outfile) + im.close() + xmpfile = XMPFiles(file_path=outfile) + xmp = xmpfile.get_xmp() + if xmp: + xmp.set_property(consts.XMP_NS_XMP, u'CreatorTool',u'treecutter') + if xmpfile.can_put_xmp(xmp): + xmpfile.put_xmp(xmp) + else: + cmd = ['exiftool', '-XMP:CreatorTool=treecutter','-quiet','-overwrite_original', outfile] + retcode = subprocess.call(cmd) + if retcode: + print 'Error: '+' '.join(cmd)+' Returncode ['+str(retcode)+']' + exit + xmpfile.close_file() self._format[size] = outfile return outfile - def set_generated(self): - print self._filename - def generated(self): - print self._filename + xmpfile = XMPFiles(file_path=self._filename) + xmp = xmpfile.get_xmp() + cr = None + if xmp.does_property_exist(consts.XMP_NS_XMP, u'CreatorTool'): + cr = xmp.get_property(consts.XMP_NS_XMP, u'CreatorTool') + return cr == u'treecutter' def thumbnail(self): - return image.resize(50,50) + return self.resize(50,50,1) def slider(self): - return image.resize(700,438) + return self.resize(700,438,1) def caption(self): + cap = "Beskrivning saknas" xmpfile = XMPFiles(file_path=self._filename) xmp = xmpfile.get_xmp() - cap = xmp.get_property(consts.XMP_NS_DC, 'description[1]' ) + if xmp: + if xmp.does_property_exist(consts.XMP_NS_DC, 'description[1]'): + cap = xmp.get_property(consts.XMP_NS_DC, 'description[1]') xmpfile.close_file() return cap -- 2.30.2