Skip to content

Simplify SciCat thumbnail logic #97

@davramov

Description

@davramov

As part of the HPSS PR #62, Kate found a few improvements for SciCat thumbnail ingestion. I'm tracking these as a new issue rather than incorporating into that PR.

This is kind of a big block for the thumbnail creation, suggest splitting it into a one or a few separate functions so it can be tested independently.

Also fwiw I found that just saving the imshow of an array with [2,98] percentile and no axes to .png makes a good thumbnail without having to do 8 bit conversion and deal with PIL and all and and all the normalization... maybe worth exploring for you because it would get rid of a lot of code. But I guess it would add numpy and matplotlib as dependencies.

from pyscicat.client import (
    encode_thumbnail
)
thumbnail = data[slice] # this is a numpy array of whatever type
vmin, vmax = np.percentile(thumbnail, [2, 98])
np.clip(thumbnail, vmin, vmax)
 with tempfile.TemporaryDirectory() as tmpdir:
        fig = plt.figure(figsize=(10,10))
        # Add an axes that fills the entire figure
        ax = fig.add_axes([0, 0, 1, 1])
        # Turn off the axes
        ax.set_axis_off()
        ax.imshow(thumbnail, cmap='gray')
        fig.show()
        fig.savefig(os.path.join(tmpdir, 'thumbnail.png'))

        thumbnail_encoded = encode_thumbnail(os.path.join(tmpdir, 'thumbnail.png'))

Originally posted by @kkamdin in #62 (comment)

With regards to encode_image_2_thumbnail(), SciCat now has a built in encode_thumbnail() function

I thought scicat has a method for this already, but maybe we're on an older version of the API.

Originally posted by @kkamdin in #62 (comment)

same comment here about piggybacking on matplot lib if you're not happy with the thumbnail resolution. Here are some of my results from trying different methods:

image

Originally posted by @kkamdin in #62 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions