%global _empty_manifest_terminate_build 0 Name: python-django-thumbnails Version: 0.7.0 Release: 1 Summary: A simple Django app to manage image/photo thumbnails. Supports remote/cloud storage systems like Amazon S3. License: MIT URL: https://github.com/ui/django-thumbnails Source0: https://mirrors.nju.edu.cn/pypi/web/packages/4a/3c/4e49626ba35a3d19e2df98aac96c84f098406888cae3c40259831463afed/django-thumbnails-0.7.0.tar.gz BuildArch: noarch Requires: python3-django Requires: python3-da-vinci Requires: python3-shortuuid Requires: python3-pillow Requires: python3-redis %description [![Build Status](https://travis-ci.org/ui/django-thumbnails.png?branch=master)](https://travis-ci.org/ui/django-thumbnails) Design: - Uses Django Storage API - Uses flexible meta data store. Uses Redis as metadata store. - Supports creating thumbnails in different formats, for example from JPG to WEBP to reduce file size Supported image formats: - JPG/JPEG - GIF - PNG - WEBP ## Installation - Add thumbnails to INSTALLED_APPS in settings.py. - Run python manage.py migrate to create database metadata backend. ## Usage settings.py: ```python THUMBNAILS = { 'METADATA': { 'BACKEND': 'thumbnails.backends.metadata.DatabaseBackend', }, 'STORAGE': { 'BACKEND': 'django.core.files.storage.FileSystemStorage', # You can also use Amazon S3 or any other Django storage backends } 'SIZES': { 'small': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 10, 'height': 10}, {'PATH': 'thumbnails.processors.crop', 'width': 80, 'height': 80} ], 'POST_PROCESSORS': [ { 'PATH': 'thumbnails.post_processors.optimize', 'png_command': 'optipng -force -o7 "%(filename)s"', 'jpg_command': 'jpegoptim -f --strip-all "%(filename)s"', }, ], }, 'large': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20}, {'PATH': 'thumbnails.processors.flip', 'direction': 'horizontal'} ], }, 'watermarked': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20}, # Only supports PNG. File must be of the same size with thumbnail (20 x 20 in this case) {'PATH': 'thumbnails.processors.add_watermark', 'watermark_path': 'watermark.png'} ], } } } ``` If you prefer to use Redis as your metadata storage backend (for performance reasons): ```python THUMBNAILS = { 'METADATA': { 'PREFIX': 'thumbs', 'BACKEND': 'thumbnails.backends.metadata.RedisBackend', 'db': 2, 'port': 6379, 'host': 'localhost', }, } ``` ## Image Processors `django-thumbnails` comes with a few builtin image processors: ```python # To use the following processors, put the arguments of processors in SIZES definition thumbnails.processors.resize(width, height, method) ## `method` can be `stretch`, `fit` or `fill` thumbnails.processors.rotate(degrees) thumbnails.processors.flip(direction) thumbnails.processors.crop(width, height, center) thumbnails.processors.add_watermark(watermark_path) ``` Processors are applied sequentially in the same order of definition. ## Storage Backend New in version 0.5.0 is per field, customizable storage backend. If you want specific fields to use a different storage backend, you can specify it directly when declaring the field. e.g: ```python class Food(models.Model): image = ImageField(storage=FileSystemStorage(), upload_to='food') ``` Storage that is specified on field will be used instead of storage that is specified in the settings. In python: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField() food = Food.objects.latest('id') food.image.thumbnails.all() food.image.thumbnails.small # Generates "small" sized thumbnail food.image.thumbnails.large # Generates "large" sized thumbnail food.image.thumbnails.small.url # Returns "small" sized thumbnail URL ``` And here's how you'd use it in Django's template: ```python {{ food.image.thumbnails.small.url }} # Returns "small" sized thumbnail URL ``` Use resize_source_to to resize your image while saving it: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField(resize_source_to="medium") ``` Assuming medium is the size that you define in the settings. By passing medium your saved image will be resized into medium's size Use pregenerated_sizes to save your thumbnails into storage backend while saving it: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField(pregenerated_sizes=["small", "large", "medium") ``` When deleting an image, you can opt to retain thumbnails by doing this: ``` python banner.image.delete(with_thumbnails=False) ``` ## Performance If you need to fetch multiple thumbnails at once, use the provided `fetch_thumbnails` function for better performance. `fetch_thumbnails` uses Redis pipeline to retrieve thumbnail metadata in one go, avoiding multiple round trips to Redis. ```python from thumbnails.field import fetch_thumbnails food_a = Food.objects.get(id=1) food_b = Food.objects.get(id=2) fetch_thumbnails([food_a.image, food_b.image], ['small', 'large']) ``` This way, when we get thumbnails like thumbnail1.size_small or even thumbnail1.all() we won't query to redis anymore. This feature is currently only available for Redis metadata Backend. ## Management Commands If you changed your size definition and want to regenerate the thumbnails, use: python manage.py delete_thumbnails --model=app.Model --size=thumbnail_size_to_delete ## Running Tests To run tests: `which django-admin.py` test thumbnails --settings=thumbnails.tests.settings --pythonpath=. ## Changelog ### Version 0.7.0 (2022-01-03) * Compatibility with django 4.0. Thanks @yosephbernandus! * Improved setup.py. Thanks @Le09! ### Version 0.6.0 (2021-05-28) * Added support for watermarking thumbnails. Thanks @marsha97! ### Version 0.5.0 (2021-05-1) * You can now pass in `storage` kwarg into `ImageField` so you can specify different storage backends for different fields. Thanks @marsha97! * Calling `image.delete(with_thumbnails=True)` will delete original image along with all thumbnails. Thanks @marsha97! ### Version 0.4.0 (2021-01-08) - Support for Django >= 3.0. Thanks @christianciu! - Added `pregenerated_sizes` to ImageField to allow thumbnails to be pregenerated on upload. Thanks @marsha97! - Thumbnails can be generated in different formats (e.g: JPG source image to WEBP thumbnail). Thanks @yosephbernandus! ### Version 0.3.2 - Fixed another bug in `fetch_thumbnails()` bug. Thanks @marsha97! ### Version 0.3.1 - Fixed `fetch_thumbnails()` bug. Thanks @marsha97! ### Version 0.3.0 - Added `fetch_thumbnails()` command to fetch multiple thumbnail metadata from Redis. Thanks @marsha97! ### Version 0.2.2 - Fixed `RedisBackend.get_thumbnail()` bug that may cause excessive trips to Redis. Thanks @marsha97! ### Version 0.2.1 - Add support for Django 1.11, 2.0 and 2.1 ### Version 0.2.0 - Improves performance on fields that have a large number of thumbnails - Add support for Django 1.8, 1.9 and 1.10 ### Version 0.1.3 - Fixes deprecation warning in Django 1.8 ### Version 0.1.2 - Fixes deprecation warning in Django 1.8 ### Version 0.1.1 - Use [shortuuid](https://github.com/stochastic-technologies/shortuuid) instead of uuid4() to be more space efficient ### Version 0.1.0 - First public release As of February 2015, this library is suitable for production use and has been used for more than a year in [Stamps](http://stamps.co.id), an Indonesian based CRM/loyalty system. %package -n python3-django-thumbnails Summary: A simple Django app to manage image/photo thumbnails. Supports remote/cloud storage systems like Amazon S3. Provides: python-django-thumbnails BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-django-thumbnails [![Build Status](https://travis-ci.org/ui/django-thumbnails.png?branch=master)](https://travis-ci.org/ui/django-thumbnails) Design: - Uses Django Storage API - Uses flexible meta data store. Uses Redis as metadata store. - Supports creating thumbnails in different formats, for example from JPG to WEBP to reduce file size Supported image formats: - JPG/JPEG - GIF - PNG - WEBP ## Installation - Add thumbnails to INSTALLED_APPS in settings.py. - Run python manage.py migrate to create database metadata backend. ## Usage settings.py: ```python THUMBNAILS = { 'METADATA': { 'BACKEND': 'thumbnails.backends.metadata.DatabaseBackend', }, 'STORAGE': { 'BACKEND': 'django.core.files.storage.FileSystemStorage', # You can also use Amazon S3 or any other Django storage backends } 'SIZES': { 'small': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 10, 'height': 10}, {'PATH': 'thumbnails.processors.crop', 'width': 80, 'height': 80} ], 'POST_PROCESSORS': [ { 'PATH': 'thumbnails.post_processors.optimize', 'png_command': 'optipng -force -o7 "%(filename)s"', 'jpg_command': 'jpegoptim -f --strip-all "%(filename)s"', }, ], }, 'large': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20}, {'PATH': 'thumbnails.processors.flip', 'direction': 'horizontal'} ], }, 'watermarked': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20}, # Only supports PNG. File must be of the same size with thumbnail (20 x 20 in this case) {'PATH': 'thumbnails.processors.add_watermark', 'watermark_path': 'watermark.png'} ], } } } ``` If you prefer to use Redis as your metadata storage backend (for performance reasons): ```python THUMBNAILS = { 'METADATA': { 'PREFIX': 'thumbs', 'BACKEND': 'thumbnails.backends.metadata.RedisBackend', 'db': 2, 'port': 6379, 'host': 'localhost', }, } ``` ## Image Processors `django-thumbnails` comes with a few builtin image processors: ```python # To use the following processors, put the arguments of processors in SIZES definition thumbnails.processors.resize(width, height, method) ## `method` can be `stretch`, `fit` or `fill` thumbnails.processors.rotate(degrees) thumbnails.processors.flip(direction) thumbnails.processors.crop(width, height, center) thumbnails.processors.add_watermark(watermark_path) ``` Processors are applied sequentially in the same order of definition. ## Storage Backend New in version 0.5.0 is per field, customizable storage backend. If you want specific fields to use a different storage backend, you can specify it directly when declaring the field. e.g: ```python class Food(models.Model): image = ImageField(storage=FileSystemStorage(), upload_to='food') ``` Storage that is specified on field will be used instead of storage that is specified in the settings. In python: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField() food = Food.objects.latest('id') food.image.thumbnails.all() food.image.thumbnails.small # Generates "small" sized thumbnail food.image.thumbnails.large # Generates "large" sized thumbnail food.image.thumbnails.small.url # Returns "small" sized thumbnail URL ``` And here's how you'd use it in Django's template: ```python {{ food.image.thumbnails.small.url }} # Returns "small" sized thumbnail URL ``` Use resize_source_to to resize your image while saving it: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField(resize_source_to="medium") ``` Assuming medium is the size that you define in the settings. By passing medium your saved image will be resized into medium's size Use pregenerated_sizes to save your thumbnails into storage backend while saving it: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField(pregenerated_sizes=["small", "large", "medium") ``` When deleting an image, you can opt to retain thumbnails by doing this: ``` python banner.image.delete(with_thumbnails=False) ``` ## Performance If you need to fetch multiple thumbnails at once, use the provided `fetch_thumbnails` function for better performance. `fetch_thumbnails` uses Redis pipeline to retrieve thumbnail metadata in one go, avoiding multiple round trips to Redis. ```python from thumbnails.field import fetch_thumbnails food_a = Food.objects.get(id=1) food_b = Food.objects.get(id=2) fetch_thumbnails([food_a.image, food_b.image], ['small', 'large']) ``` This way, when we get thumbnails like thumbnail1.size_small or even thumbnail1.all() we won't query to redis anymore. This feature is currently only available for Redis metadata Backend. ## Management Commands If you changed your size definition and want to regenerate the thumbnails, use: python manage.py delete_thumbnails --model=app.Model --size=thumbnail_size_to_delete ## Running Tests To run tests: `which django-admin.py` test thumbnails --settings=thumbnails.tests.settings --pythonpath=. ## Changelog ### Version 0.7.0 (2022-01-03) * Compatibility with django 4.0. Thanks @yosephbernandus! * Improved setup.py. Thanks @Le09! ### Version 0.6.0 (2021-05-28) * Added support for watermarking thumbnails. Thanks @marsha97! ### Version 0.5.0 (2021-05-1) * You can now pass in `storage` kwarg into `ImageField` so you can specify different storage backends for different fields. Thanks @marsha97! * Calling `image.delete(with_thumbnails=True)` will delete original image along with all thumbnails. Thanks @marsha97! ### Version 0.4.0 (2021-01-08) - Support for Django >= 3.0. Thanks @christianciu! - Added `pregenerated_sizes` to ImageField to allow thumbnails to be pregenerated on upload. Thanks @marsha97! - Thumbnails can be generated in different formats (e.g: JPG source image to WEBP thumbnail). Thanks @yosephbernandus! ### Version 0.3.2 - Fixed another bug in `fetch_thumbnails()` bug. Thanks @marsha97! ### Version 0.3.1 - Fixed `fetch_thumbnails()` bug. Thanks @marsha97! ### Version 0.3.0 - Added `fetch_thumbnails()` command to fetch multiple thumbnail metadata from Redis. Thanks @marsha97! ### Version 0.2.2 - Fixed `RedisBackend.get_thumbnail()` bug that may cause excessive trips to Redis. Thanks @marsha97! ### Version 0.2.1 - Add support for Django 1.11, 2.0 and 2.1 ### Version 0.2.0 - Improves performance on fields that have a large number of thumbnails - Add support for Django 1.8, 1.9 and 1.10 ### Version 0.1.3 - Fixes deprecation warning in Django 1.8 ### Version 0.1.2 - Fixes deprecation warning in Django 1.8 ### Version 0.1.1 - Use [shortuuid](https://github.com/stochastic-technologies/shortuuid) instead of uuid4() to be more space efficient ### Version 0.1.0 - First public release As of February 2015, this library is suitable for production use and has been used for more than a year in [Stamps](http://stamps.co.id), an Indonesian based CRM/loyalty system. %package help Summary: Development documents and examples for django-thumbnails Provides: python3-django-thumbnails-doc %description help [![Build Status](https://travis-ci.org/ui/django-thumbnails.png?branch=master)](https://travis-ci.org/ui/django-thumbnails) Design: - Uses Django Storage API - Uses flexible meta data store. Uses Redis as metadata store. - Supports creating thumbnails in different formats, for example from JPG to WEBP to reduce file size Supported image formats: - JPG/JPEG - GIF - PNG - WEBP ## Installation - Add thumbnails to INSTALLED_APPS in settings.py. - Run python manage.py migrate to create database metadata backend. ## Usage settings.py: ```python THUMBNAILS = { 'METADATA': { 'BACKEND': 'thumbnails.backends.metadata.DatabaseBackend', }, 'STORAGE': { 'BACKEND': 'django.core.files.storage.FileSystemStorage', # You can also use Amazon S3 or any other Django storage backends } 'SIZES': { 'small': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 10, 'height': 10}, {'PATH': 'thumbnails.processors.crop', 'width': 80, 'height': 80} ], 'POST_PROCESSORS': [ { 'PATH': 'thumbnails.post_processors.optimize', 'png_command': 'optipng -force -o7 "%(filename)s"', 'jpg_command': 'jpegoptim -f --strip-all "%(filename)s"', }, ], }, 'large': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20}, {'PATH': 'thumbnails.processors.flip', 'direction': 'horizontal'} ], }, 'watermarked': { 'PROCESSORS': [ {'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20}, # Only supports PNG. File must be of the same size with thumbnail (20 x 20 in this case) {'PATH': 'thumbnails.processors.add_watermark', 'watermark_path': 'watermark.png'} ], } } } ``` If you prefer to use Redis as your metadata storage backend (for performance reasons): ```python THUMBNAILS = { 'METADATA': { 'PREFIX': 'thumbs', 'BACKEND': 'thumbnails.backends.metadata.RedisBackend', 'db': 2, 'port': 6379, 'host': 'localhost', }, } ``` ## Image Processors `django-thumbnails` comes with a few builtin image processors: ```python # To use the following processors, put the arguments of processors in SIZES definition thumbnails.processors.resize(width, height, method) ## `method` can be `stretch`, `fit` or `fill` thumbnails.processors.rotate(degrees) thumbnails.processors.flip(direction) thumbnails.processors.crop(width, height, center) thumbnails.processors.add_watermark(watermark_path) ``` Processors are applied sequentially in the same order of definition. ## Storage Backend New in version 0.5.0 is per field, customizable storage backend. If you want specific fields to use a different storage backend, you can specify it directly when declaring the field. e.g: ```python class Food(models.Model): image = ImageField(storage=FileSystemStorage(), upload_to='food') ``` Storage that is specified on field will be used instead of storage that is specified in the settings. In python: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField() food = Food.objects.latest('id') food.image.thumbnails.all() food.image.thumbnails.small # Generates "small" sized thumbnail food.image.thumbnails.large # Generates "large" sized thumbnail food.image.thumbnails.small.url # Returns "small" sized thumbnail URL ``` And here's how you'd use it in Django's template: ```python {{ food.image.thumbnails.small.url }} # Returns "small" sized thumbnail URL ``` Use resize_source_to to resize your image while saving it: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField(resize_source_to="medium") ``` Assuming medium is the size that you define in the settings. By passing medium your saved image will be resized into medium's size Use pregenerated_sizes to save your thumbnails into storage backend while saving it: ```python from thumbnails.fields import ImageField class Food(models.Model): image = ImageField(pregenerated_sizes=["small", "large", "medium") ``` When deleting an image, you can opt to retain thumbnails by doing this: ``` python banner.image.delete(with_thumbnails=False) ``` ## Performance If you need to fetch multiple thumbnails at once, use the provided `fetch_thumbnails` function for better performance. `fetch_thumbnails` uses Redis pipeline to retrieve thumbnail metadata in one go, avoiding multiple round trips to Redis. ```python from thumbnails.field import fetch_thumbnails food_a = Food.objects.get(id=1) food_b = Food.objects.get(id=2) fetch_thumbnails([food_a.image, food_b.image], ['small', 'large']) ``` This way, when we get thumbnails like thumbnail1.size_small or even thumbnail1.all() we won't query to redis anymore. This feature is currently only available for Redis metadata Backend. ## Management Commands If you changed your size definition and want to regenerate the thumbnails, use: python manage.py delete_thumbnails --model=app.Model --size=thumbnail_size_to_delete ## Running Tests To run tests: `which django-admin.py` test thumbnails --settings=thumbnails.tests.settings --pythonpath=. ## Changelog ### Version 0.7.0 (2022-01-03) * Compatibility with django 4.0. Thanks @yosephbernandus! * Improved setup.py. Thanks @Le09! ### Version 0.6.0 (2021-05-28) * Added support for watermarking thumbnails. Thanks @marsha97! ### Version 0.5.0 (2021-05-1) * You can now pass in `storage` kwarg into `ImageField` so you can specify different storage backends for different fields. Thanks @marsha97! * Calling `image.delete(with_thumbnails=True)` will delete original image along with all thumbnails. Thanks @marsha97! ### Version 0.4.0 (2021-01-08) - Support for Django >= 3.0. Thanks @christianciu! - Added `pregenerated_sizes` to ImageField to allow thumbnails to be pregenerated on upload. Thanks @marsha97! - Thumbnails can be generated in different formats (e.g: JPG source image to WEBP thumbnail). Thanks @yosephbernandus! ### Version 0.3.2 - Fixed another bug in `fetch_thumbnails()` bug. Thanks @marsha97! ### Version 0.3.1 - Fixed `fetch_thumbnails()` bug. Thanks @marsha97! ### Version 0.3.0 - Added `fetch_thumbnails()` command to fetch multiple thumbnail metadata from Redis. Thanks @marsha97! ### Version 0.2.2 - Fixed `RedisBackend.get_thumbnail()` bug that may cause excessive trips to Redis. Thanks @marsha97! ### Version 0.2.1 - Add support for Django 1.11, 2.0 and 2.1 ### Version 0.2.0 - Improves performance on fields that have a large number of thumbnails - Add support for Django 1.8, 1.9 and 1.10 ### Version 0.1.3 - Fixes deprecation warning in Django 1.8 ### Version 0.1.2 - Fixes deprecation warning in Django 1.8 ### Version 0.1.1 - Use [shortuuid](https://github.com/stochastic-technologies/shortuuid) instead of uuid4() to be more space efficient ### Version 0.1.0 - First public release As of February 2015, this library is suitable for production use and has been used for more than a year in [Stamps](http://stamps.co.id), an Indonesian based CRM/loyalty system. %prep %autosetup -n django-thumbnails-0.7.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-django-thumbnails -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Wed May 10 2023 Python_Bot - 0.7.0-1 - Package Spec generated