Пример #1
0
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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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'])
Пример #7
0
 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))
Пример #8
0
    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))