Skip to main content

Classes and methods to handle pictures for the web

Project description

Build pypi versions codecov license

Gallerist

Classes and methods to handle pictures for the web, using Pillow.

$ pip install gallerist

Features

  • Code api to handle the generation of pictures in various sizes (e.g. medium size picture, small size, thumbnail)
  • Both asynchronous api and synchronous api
  • Supports user defined stores for binaries, for example to read and write files in Azure Blob Storage, or AWS S3
  • Handles by default JPG, PNG, GIF, MPO; and provides a code api to support adding more supported formats
  • Supports scaling animated GIF files (resized gifs are still animated)
  • Maintains PNG transparencies

See also

Examples

Basic example using the synchronous api, and reading files from file system:

from gallerist import Gallerist
from gallerist.fs import FileSystemSyncFileStore


gallerist = Gallerist(FileSystemSyncFileStore('tests'))


metadata = gallerist.process_image('files/blacksheep.png')

Configuring sizes

from gallerist import Gallerist, ImageSize
from gallerist.fs import FileSystemSyncFileStore


store = FileSystemSyncFileStore("tests")

# configuring sizes by mime (use '*' to match any other mime):
gallerist = Gallerist(
    store,
    sizes={
        "image/jpeg": [ImageSize("a", 500), ImageSize("b", 400), ImageSize("c", 300)],
        "image/png": [ImageSize("a", 350), ImageSize("b", 250), ImageSize("c", 150)],
    },
)

metadata = gallerist.process_image("files/pexels-photo-126407.jpeg")

print(metadata)

The original picture is not modified, it is only read to produce more images in other sizes.

Metadata:

<ImageMetadata width=2520 height=1418 extension=".jpg" mime="image/jpeg" versions=[
  <ImageVersion
    size_name="a"
    id="bbf665ba8dd3412a84ac435a086fc7ad"
    max_side=500
    file_name="a-bbf665ba8dd3412a84ac435a086fc7ad.jpg"
  >,
  <ImageVersion
    size_name="b"
    id="7e4b38b977964c2a91544c1e0621c3a1"
    max_side=400
    file_name="b-7e4b38b977964c2a91544c1e0621c3a1.jpg"
  >,
  <ImageVersion
    size_name="c"
    id="847cad2796004b5086269bec9d705cdc"
    max_side=300
    file_name="c-847cad2796004b5086269bec9d705cdc.jpg"
  >
]>

Implementing a custom file store

Custom stores must implement one of the following protocols:

from gallerist.abc import FileStore, SyncFileStore


class MyAsyncFileStore(FileStore):
    """Implement your async file store, then use gallerist.process_image_async method"""

    async def read_file(self, file_path: str) -> bytes:
        pass

    async def write_file(self, file_path: str, data: bytes):
        pass

    async def delete_file(self, file_path: str):
        pass


class MySyncFileStore(SyncFileStore):
    """Implement your sync file store, then use gallerist.process_image method"""

    def read_file(self, file_path: str) -> bytes:
        pass

    def write_file(self, file_path: str, data: bytes):
        pass

    def delete_file(self, file_path: str):
        pass

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gallerist-0.0.5.tar.gz (9.0 kB view hashes)

Uploaded Source

Built Distribution

gallerist-0.0.5-py3-none-any.whl (8.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page