def load(self, buffer, extension): self.extension = extension if extension is None: mime = self.get_mimetype(buffer) self.extension = EXTENSION.get(mime, '.jpg') if self.extension == '.svg': buffer = self.convert_svg_to_png(buffer) image_or_frames = self.create_image(buffer) if METADATA_AVAILABLE: try: self.metadata = ImageMetadata.from_buffer(buffer) self.metadata.read() except Exception as e: logger.error('Error reading image metadata: %s' % e) if self.context.config.ALLOW_ANIMATED_GIFS and isinstance( image_or_frames, (list, tuple)): self.image = image_or_frames[0] if len(image_or_frames) > 1: self.multiple_engine = MultipleEngine(self) for frame in image_or_frames: self.multiple_engine.add_frame(frame) self.wrap(self.multiple_engine) else: self.image = image_or_frames if self.source_width is None: self.source_width = self.size[0] if self.source_height is None: self.source_height = self.size[1]
def _read_image_metadata(img): if HAS_PYEXIV2: metadata = ImageMetadata.from_buffer(img) metadata.read() return metadata else: return {}
def save(self, *args, **kwargs): if self.pk == None: # Only do this when adding a new item metadata = ImageMetadata.from_buffer(self.image.read(1024*1024)) # 1MB should be enough to get Exif tags metadata.read() self.date_taken = metadata['Exif.Photo.DateTimeOriginal'].value super(Photo, self).save(*args, **kwargs) # Call the "real" save() method.