image: improve image handling, caption, resize
authorFredrik Unger <fred@tree.se>
Tue, 31 Mar 2015 12:22:17 +0000 (14:22 +0200)
committerFredrik Unger <fred@tree.se>
Tue, 31 Mar 2015 12:22:17 +0000 (14:22 +0200)
Files being resized are marked as resized by treecutter.
Captions are read from the xmp description.

treecutter/image.py

index 7d01462ac3f8ae38907c98993f89d45c04707eaf..d031e2650a26ec7f6fc2d172db5288e1b54c241f 100644 (file)
@@ -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