https://github.com/klen/imgproxy
Python support for ImgProxy image processing server (https://imgproxy.net)
https://github.com/klen/imgproxy
image-processing imgproxy
Last synced: 10 months ago
JSON representation
Python support for ImgProxy image processing server (https://imgproxy.net)
- Host: GitHub
- URL: https://github.com/klen/imgproxy
- Owner: klen
- Created: 2021-04-01T14:02:25.000Z (about 5 years ago)
- Default Branch: develop
- Last Pushed: 2021-11-08T13:16:33.000Z (over 4 years ago)
- Last Synced: 2025-05-16T21:47:01.802Z (about 1 year ago)
- Topics: image-processing, imgproxy
- Language: Python
- Homepage:
- Size: 52.7 KB
- Stars: 17
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ImgProxy
**ImgProxy** -- Python library to build [ImgProxy](https://docs.imgproxy.net/) URLs
[](https://github.com/klen/imgproxy/actions)
[](https://pypi.org/project/imgproxy/)
[](https://pypi.org/project/imgproxy/)
---
## Features
* Generates [URLs](https://docs.imgproxy.net/generating_the_url) urls
* Support for [signing](https://docs.imgproxy.net/#/signing_the_url) urls
* URL's Factories with predefined params
# Table of Contents
* [Requirements](#requirements)
* [Installation](#installation)
* [Usage](#usage)
* [Options](#options)
* [Signed URLs](#signed-urls)
* [Image factories](#image-factories)
* [Changelog](#changelog)
* [Bug tracker](#bug-tracker)
* [Contributing](#contributing)
* [License](#license)
## Requirements
* python >= 3.7
## Installation
**imgproxy** should be installed using pip:
$ pip install imgproxy
## Usage
```python
from imgproxy import ImgProxy
# Create ImgProxy object with required params
img_url = ImgProxy('https://picsum.photos/1000', proxy_host='https://imgproxy.com', width=800, height=400)
# Convert the obj to string to get imgproxy URL
cover: str = str(img_url)
# or just call it to get imgproxy URL
cover: str = img_url()
assert cover == 'https://imgproxy.com/insecure/g:ce/rs:auto:800:400:0/aHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMDA'
# Call the object with different params to customize the url
cover_small: str = img_url(width=400, height=200, resizing_type='fill')
assert cover_small == 'https://imgproxy.com/insecure/g:ce/rs:fill:400:200:0/aHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMDA'
# Call it with advanced params to get an URL
cover_with_border = img_url('pd:10:10:10:10', 'bg:F00')
assert cover_with_border == 'https://imgproxy.com/insecure/pd:10:10:10:10/bg:F00/g:ce/rs:auto:0:0:0/aHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMDA'
```
### Options
Basic options (default values):
* `width: int = 0` - images width
* `height: int = 0` - images height
* `gravity: str = 'ce'` - images gravity
* `enlarge: bool = False` - enlarge an image
* `extension: str = ''` - images extension
* `resizing_type: str = 'auto'` - resizing type
```python
from imgproxy import ImgProxy
img_url = ImgProxy('https://picsum.photos/1000', proxy_host='https://imgproxy.com')
thumbmail = img_url(width=100, height=100, gravity='no', extension='jpg', enlarge=True, resizing_type='fit')
```
Any other options are also supported when you call an imageproxy instance:
```python
from imgproxy import ImgProxy
img_url = ImgProxy('https://picsum.photos/1000', proxy_host='https://imgproxy.com')
# Get rotated and blured image
blured_rotated = img_url('blur:0.5', 'rotate:30')
```
### Signed URLs
Imgproxy allows you to sign your URLs with key and salt, so an attacker won’t
be able to cause a denial-of-service attack by requesting multiple different
image resizes.
```python
from imgproxy import ImgProxy
url = ImgProxy('https://picsum.photos/1000', proxy_host='https://imgproxy.com', key="aa396160c50ea766910eab53", salt="b3fb8f215827bda5d0e7313d")
assert str(url) == 'https://imgproxy.com/FrH21u_5bXmv-OJ0APMayxZ0F3982xx437gCpqcQ0BM/g:ce/rs:auto:600:0:0/aHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMDA'
```
If you need a random key/salt pair real fast, you can quickly generate it
using, for example, the following snippet:
```shell
echo $(xxd -g 2 -l 64 -p /dev/random | tr -d '\n')
```
### Image factories
Usually imgproxy host and signature params are common for a project.
The library supports a method to generate a factory with predefined params:
```python
from imgproxy import ImgProxy
img_factory = ImgProxy.factory(proxy_host='https://imgproxy.com', key="aa396160c50ea766910eab53", salt="b3fb8f215827bda5d0e7313d")
# ...
# Generate image URL
url = img_factory('https://picsum.photos/1000', width=600)
assert str(url) == 'https://imgproxy.com/qcKAFfBJwpiKZ6xt-NT6GXGOGizkeq4sgyfoQ4h-080/g:ce/rs:auto:600:0:0/aHR0cHM6Ly9waWNzdW0ucGhvdG9zLzEwMDA'
```
Users able to predifine any basic params:
```python
thumbnail_factory = ImgProxy.factory(proxy_host='https://imgproxy.com', width=300, height=200)
preview_factory = ImgProxy.factory(proxy_host='https://imgproxy.com', width=500, resizing_type='fit')
# and etc
```
Advanced params are also supported:
```python
thumbnail_factory = ImgProxy.factory('bg:F00', 'pd:10:10:10:10', proxy_host='https://imgproxy.com', width=300, height=200)
```
## Changelog
* 2021-11-08: **[1.0.0]**
- Support python 3.10
- Support advanced options in factories
* 2021-09-14: **[0.4.0]**
- Support python 3.7
- Basic format has been removed (it's depricated in ImgProxy)
* 2021-04-02: **[0.2.3]** Stable release
## Bug tracker
If you have any suggestions, bug reports or annoyances please report them to
the issue tracker at https://github.com/klen/imgproxy/issues
## Contributing
Development of the project happens at: https://github.com/klen/imgproxy
## License
Licensed under a [MIT License](http://opensource.org/licenses/MIT)