def meta_to_tag(context, event): tagging_config = get_tagging_config() meta = image_to_meta(context, use_exif=tagging_config.use_exif, use_iptc=tagging_config.use_iptc, use_xmp=tagging_config.use_xmp) allowed_exif = tagging_config.exif_fields allowed_iptc = tagging_config.iptc_fields allowed_xmp = tagging_config.xmp_fields if hasattr(meta['iptc'], 'data'): iptc = meta['iptc'].data else: iptc = meta['iptc'] exif = meta['exif'] xmp = meta['xmp'] tags = list(context.Subject()) if tagging_config.use_iptc: tags = tags + get_tags(iptc, allowed_iptc) if tagging_config.use_exif: tags = tags + get_tags(exif, allowed_exif) if tagging_config.use_xmp: tags = tags + get_tags(xmp, allowed_xmp) add_tags(context, tags_to_add=tags)
def test_image_to_meta_no_image(self): result = image_to_meta(None) self.assertTrue(result) self.assertTrue('iptc' in result) self.assertTrue('exif' in result) self.assertTrue('xmp' in result)
def test_meta_tags(self): self.config.add_exif_tag('Image Copyright') self.config.add_iptc_tag('5') self.config.add_iptc_tag('25') self.portal.invokeFactory('Folder', 'test-folder', title="Test Title") folder = self.portal['test-folder'] dirname, filename = os.path.split(os.path.abspath(__file__)) path = os.path.join(dirname, "test_images", "metadata-test-image-L.jpg") folder.invokeFactory('Image', 'testimage', image=image_by_path(path)) image = folder['testimage'] meta = image_to_meta(image) exif = meta['exif'] iptc = meta['iptc'].data subjects = image.Subject() self.assertTrue(exif['Image Copyright'].printable in subjects) self.assertFalse(exif['EXIF FlashPixVersion'].printable in subjects) self.assertTrue(iptc[5] in subjects) # iptc[25 is a list self.assertTrue(iptc[25][0] in subjects)
def test_regex_no_match(self): self.config.exif_fields = [{ 'regex': '(\w+) (\w+)', 'field': u'Image Copyright', 'format': 'hello_{1}_{0}' }] self.portal.invokeFactory('Folder', 'test-folder', title="Test Title") folder = self.portal['test-folder'] dirname, filename = os.path.split(os.path.abspath(__file__)) path = os.path.join(dirname, "test_images", "small_IMG_5097.jpg") folder.invokeFactory('Image', 'testimage', image=image_by_path(path)) image = folder['testimage'] meta = image_to_meta(image) exif = meta['exif'] subjects = image.Subject() self.assertFalse(exif['Image Copyright'].printable in subjects) self.assertTrue(subjects)
def test_meta_tags_with_only_format(self): self.config.exif_fields = [{ 'regex': None, 'field': u'Image Copyright', 'format': 'hello_{0}' }] self.portal.invokeFactory('Folder', 'test-folder', title="Test Title") folder = self.portal['test-folder'] dirname, filename = os.path.split(os.path.abspath(__file__)) path = os.path.join(dirname, "test_images", "metadata-test-image-L.jpg") folder.invokeFactory('Image', 'testimage', image=image_by_path(path)) image = folder['testimage'] meta = image_to_meta(image) exif = meta['exif'] subjects = image.Subject() self.assertFalse(exif['Image Copyright'].printable in subjects) self.assertTrue('hello_' + exif['Image Copyright'].printable in subjects)
def test_image_to_meta(self): self.folder.invokeFactory('Image', 'testimage') img = self.folder['testimage'] dirname, filename = os.path.split(os.path.abspath(__file__)) path = os.path.join(dirname, "test_images", "metadata-test-image-L.jpg") img.image = image_by_path(path) img.reindexObject() meta = image_to_meta(img) self.assertTrue(meta['iptc']) self.assertTrue(meta['exif']) meta = image_to_meta(img, use_exif=False) self.assertTrue(meta['iptc']) self.assertFalse(meta['exif']) meta = image_to_meta(img, use_iptc=False) self.assertTrue(meta['exif']) self.assertFalse(meta['iptc'])
def updateFields(self): super(TagImportExifEditForm, self).updateFields() config_store = get_tagging_config() test_image = config_store.test_image if test_image and test_image.portal_type and test_image.portal_type == 'Image': exif = image_to_meta(test_image)['iptc'].data exif_keys = exif.keys() exif_keys.sort() for exif_key in exif_keys: exif_field = exif[exif_key] if str(exif_field) and len(str(exif_field)) < 100 : self.fields += field.Fields(schema.Bool( __name__=str(exif_key), title=unicode(exif_key), description=unicode("Example: " +str(exif_field)), default=False))
def updateFields(self): super(TagImportExifEditForm, self).updateFields() config_store = get_tagging_config() test_image = config_store.test_image if test_image and test_image.portal_type and test_image.portal_type == 'Image': xmp_data = image_to_meta(test_image)['xmp'] xmp_keys = xmp_data.keys() xmp_keys.sort() for xmp_key in xmp_keys: xmp_field = xmp_data[xmp_key] if str(xmp_field) and len(str(xmp_field)) < 100 : self.fields += field.Fields(schema.Bool( __name__=str(xmp_key), title=unicode(xmp_key), description=unicode("Example: " +str(xmp_field)), default=False))