Reflex is an image manipulation tool built for the Web. This is the Python client.
Install the reflex-client
via pip:
pip install reflex-client
400x400 crop:
>>> from reflex import transform
>>> transform("https://a.reflex.se.am/", "http://example.com/image.jpg", ["400x400"])
'http://a.reflex.se.am/400x400/http://example.com/image.jpg'
400x400 crop on a batch of images:
>>> from reflex import batch_transform
>>> images = [
... "http://example.com/image1.jpg",
... "http://example.com/image2.jpg",
... "http://example.com/image3.jpg",
... ]
>>> batch_transform(
... "https://a.reflex.se.am/",
... images,
... ["400x400"]
... )
['https://a.reflex.se.am/400x400/http://example.com/image1.jpg', 'https://a.reflex.se.am/400x400/http://example.com/image2.jpg', 'https://a.reflex.se.am/400x400/http://example.com/image3.jpg']
Sign a source URL
>>> from reflex import sign_transform
>>> sign_transform("http://example.com/image1.jpg", key="testkey")
'yclO5mOVIZLnvOIkEYj7b_jvXpyYyVCWAAgCQ-b0GyY='
This is helpful if you'd like to generate source-signed transforms using a client-side language like Javascript (i.e. using reflex-js
), but wish not to (and definitely should not) expose your Reflex key
. Instead, the signature for a given source_url
and Reflex key
can be generated server side and exposed via a RESTful API or bootstrapped with the page.
Using the Client
>>> from reflex import Client
>>> r = Client("https://a.reflex.se.am/", key="testkey")
>>> r.transform("http://example.com/image1.jpg", "400x400")
'https://a.reflex.se.am/400x400,syclO5mOVIZLnvOIkEYj7b_jvXpyYyVCWAAgCQ-b0GyY=/http://example.com/image1.jpg'
The Client
can be used to persist credentials that are likely to be shared between multiple transformations, e.g. proxy_url
and key
.
A crop/resize operation should be specified as {width}x{height}
, {width}x
, x{height}
or simply a single value with no x
separator if the value is to be used for both width
and height
. Integer values greater than 1 (e.g. 150x100
) are interpreted as exact pixel values and floats between 0 and 1 (e.g. 0.15x
) are interpreted as percentages of the original image size. Cropping will occur when both width
and height
values are provided, and they do not preserve the original aspect ratio of the image.
The fit
operation should be specified together with a crop/resize operation and will ensure resize operations fit within a containing box of the specified size whilst retaining the original aspect ratio.
The r{degrees}
operation can be used in increments of 90 (90
, 180
and 270
) degrees to rotate the image counter-clockwise. This operation has a lower precidence than crop/resize.
The fv
and fh
operations flip an image vertically and horizontally, respectively. This has a lower precedence than the rotate operation.
The q{percentage}
operation is used to specify the output quality. If not specified, a default value of 95 is used. Currently only JPEG is supported.