Source code for transcriptic.analysis.imaging
from io import BytesIO
from transcriptic import api
try:
from PIL import Image
except ImportError:
raise ImportError(
"Please run `pip install transcriptic[analysis] if you "
"would like to use the Transcriptic analysis module."
)
[docs]class ImagePlate(object):
"""
An ImagePlate object generalizes the parsing of datasets derived from the
plate camera for easy visualization.
Parameters
----------
dataset: dataset
Single dataset selected from datasets object
Attributes
----------
raw: BytesIO
Raw buffer of image bytes
image: PIL.Image
Image object as rendered by PIL
"""
def __init__(self, dataset):
if dataset.attributes["instruction"]["operation"]["op"] != "image_plate":
raise RuntimeError("No image_plate operation found for given dataset.")
self.id = dataset.id
self.raw = BytesIO()
req = api.raw_image_data(data_id=self.id)
# Buffer download of data
chunk_sz = 512
for chunk in req.iter_content(chunk_sz):
self.raw.write(chunk)
# Reset seek to 0
self.raw.seek(0)
self.image = Image.open(self.raw)
[docs] def display(self):
"""
Displays the original full-sized image. Helpful when used in an IPython
kernel
Returns
-------
HTML
Returns a HTML iframe of the full-size image which is rendered nicely in IPython (if IPython is present)
"""
try:
# pylint: disable=import-error
from IPython.display import HTML
return HTML(
"""<iframe src="%s")" frameborder="0" \
allowtransparency="true" style="height:500px;" seamless> \
</iframe>"""
% api.get_route("view_raw_image", data_id=self.id)
)
except:
# If IPython module is not present or unable to show, display using
# default PIL image show
self.image.show()