def updateIPTC(obj, event): """ On edit store the updated image metadata inside the image file itself in IPTC format """ if WATERMARK: state = getToolByName(obj,'portal_workflow').getInfoFor(obj,'review_state') else: state = None if WATERMARK and state in ['published', 'featured']: img = ImageExtender(obj).fields[0].get(obj) else: img = obj.getImage() fd, filename = tempfile.mkstemp('_'+obj.getId()) os.close(fd) fout = open(filename, 'wb') fout.write(img.data) fout.close() info = IPTCInfo(filename, force=True) info.data['object name'] = obj.Title() info.data['caption/abstract'] = obj.Description() info.data['by-line'] = obj.Creator() info.data['copyright notice'] = obj.Rights() info.data['keywords'] = [i for i in obj.Subject()] info.keyword = info.data['keywords'] info.data['sub-location'] = obj.getLocation().strip() info.data['city'] = obj.getLocation().strip() info.data['province/state'] = obj.getLocation().strip() info.data['country/primary location name'] = obj.getLocation().strip() info.data['country/primary location code'] = obj.getLocation().strip() info.save() if WATERMARK: # Set the original image field to have the updated IPTC fin = open(filename) ImageExtender(obj).fields[0].set(obj, fin.read()) fin.close() if state in ['published', 'featured']: applyWatermark(obj) else: obj.setImage(ImageExtender(obj).fields[0].get(obj)) else: fin = open(filename) obj.setImage(fin.read()) fin.close()