From 1f12154876c4962616d6f179ab9af4ad1b95e599 Mon Sep 17 00:00:00 2001 From: Joel Collins Date: Wed, 28 Oct 2020 16:02:08 +0000 Subject: [PATCH] Fixed thumbnail generation for video_port captures --- openflexure_microscope/captures/__init__.py | 2 +- openflexure_microscope/captures/capture.py | 14 ++++++++++++-- openflexure_microscope/microscope.py | 4 ++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/openflexure_microscope/captures/__init__.py b/openflexure_microscope/captures/__init__.py index 3b7e84d6..4df0ac64 100644 --- a/openflexure_microscope/captures/__init__.py +++ b/openflexure_microscope/captures/__init__.py @@ -1,3 +1,3 @@ from . import capture, capture_manager -from .capture import CaptureObject +from .capture import CaptureObject, THUMBNAIL_SIZE from .capture_manager import CaptureManager diff --git a/openflexure_microscope/captures/capture.py b/openflexure_microscope/captures/capture.py index 5c840454..787572fa 100644 --- a/openflexure_microscope/captures/capture.py +++ b/openflexure_microscope/captures/capture.py @@ -6,6 +6,7 @@ import logging import os import uuid from collections import OrderedDict +from PIL import Image import dateutil.parser @@ -14,6 +15,7 @@ from openflexure_microscope.camera.piexif._exceptions import InvalidImageDataErr from openflexure_microscope.config import JSONEncoder EXIF_FORMATS = ["JPG", "JPEG", "TIF", "TIFF"] +THUMBNAIL_SIZE = (200, 150) def pull_usercomment_dict(filepath): @@ -347,8 +349,16 @@ class CaptureObject(object): thumbnail = exif_dict.pop("thumbnail") if thumbnail: return io.BytesIO(thumbnail) - # If no thumbnail exists, serve the full image - return self.data + # If no thumbnail exists, make and save one + thumb_bytes = io.BytesIO() + thumb_im = Image.open(self.data) + thumb_im.thumbnail(THUMBNAIL_SIZE) + thumb_im.save(thumb_bytes, "jpeg") + thumbnail = thumb_bytes.getvalue() + exif_dict["thumbnail"] = thumbnail + exif_bytes = piexif.dump(exif_dict) + piexif.insert(exif_bytes, self.file) + return io.BytesIO(thumbnail) def save(self) -> None: """Write stream to file, and save/update metadata file""" diff --git a/openflexure_microscope/microscope.py b/openflexure_microscope/microscope.py index 1cbcf270..6e5b9bff 100644 --- a/openflexure_microscope/microscope.py +++ b/openflexure_microscope/microscope.py @@ -10,7 +10,7 @@ import pkg_resources from expiringdict import ExpiringDict from openflexure_microscope.camera.mock import MissingCamera -from openflexure_microscope.captures import CaptureManager +from openflexure_microscope.captures import CaptureManager, THUMBNAIL_SIZE from openflexure_microscope.stage.mock import MissingStage from openflexure_microscope.stage.sanga import SangaDeltaStage, SangaStage @@ -387,7 +387,7 @@ class Microscope: # Capture to output object extras = {} if fmt == "jpeg": - extras["thumbnail"] = (200, 150, 85) + extras["thumbnail"] = (*THUMBNAIL_SIZE, 85) logging.info("Starting microscope capture %s", output.file) self.camera.capture( output,