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"""
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