convert one image to several sizes in django REST and django models
Project description
onetomultipleimage
onetomultipleimage is a django package to convert one image to specified sizes. it can be used in REST or django model.
installation
1- run: pip install onetomultipleimage[jalali]
To install onetomultipleimage with Jalali date support, add [jalali]
part.
IMAGES_PATH_TYPE='jalali'
in settings.py, now jalali date path used (instead default gregorian) like:
/media/FatherImage/1401/12/13/small.jpg instead of: /media/FatherImage/2023/3/4/small.jpg
2- to install onetomultipleimage models, add 'onetomultipleimage' to INSTALLED_APPS
of project's settings.py
after makemigrations and migrate, models will be created.
Serializer Field: OneToMultipleImage
Receives image in Base64/form-data with list of sizes and generate images with specified sizes.
OneToMultipleImage
arguments:
-
sizes: list of sizes in str. for generate original image use 'default'. required in writing.
-
upload_to: path in str for uploads image. required in writing.
-
data: it is same
data
pass to serializer in writing, but structure should be:
{'image': formdata_file/Base64_str, 'alt': 'some_alt'}image
key is required. can be formdata file or Base64 str.alt
is optional and will fill auto if left blank.
example 1:
from onetomultipleimage.field import OneToMultipleImage
image = request.FILES['image']
serializer = OneToMultipleImage(sizes=['120', '240', 'default'], data={'image': image})
serializer.is_valid()
s.validated_data
.validated_data
here returns 3 object with 120px height, 240px height, and default (original) image sizes. validated_data
returns like:
{'image': [<Upload object 1e2813-120 - (.image .url .alt .size)>, <Upload object 1e2813-240 - (.image .url .alt .size)>, <Upload object 1e2813-default - (.image .url .alt .size)>]}
OneToMultipleImage can use inside a serializer.
example 2:
class PostSerializer(serializers.Serializer):
image = OneToMultipleImage(sizes=['120', '240', 'default'])
data = {'image': {'image': "data:image/jpeg;base64,/9j/..."}} # image in Base64 (str)
serializer = PostSerializer(data=data)
serializer.is_valid()
s.validated_data
same result...
onetomultipleimage models
if you need django model for one-to-multy process, you have to add onetomultipleimage
to INSTALLED_APPS
. after migrate, you have two table FatherImage, ImageSizes.
FatherImage model
Store original image. attributes:
- image: django ImageField.
upload_to
path is: 'FatherImage/year/month/day' but can override directly before model initializing. - alt: django CharField, represent image's alt, you can leave it blank to auto generating by uuid.uuid4
- sizes: custom ListCharField, represent lists of sizes you want to create them. (like: ['120', '240'])
ImageSizes
Stores different sizes of original image. attributes:
- image: django ImageField.
upload_to
path is: 'ImageSizes/year/month/day' but can override directly before model initializing. - alt: django CharField, represent image's alt, you can leave it blank to auto generating by uuid.uuid4
- size: django CharField, represent size of image (in str).
- father: django ForeignKey, reference to FatherImage. (FatherImage.imagesizes in reverse relation is accecible)
example 1:
image = FatherImage(image=request.FILES['image'], sizes=['120', '240', '480'])
image.save()
now fatherimage and 3 imagesizes with 120, 240, 480 PXs is created. fatherimage.alt and imagesizes.alt auto generated like: 'db949e-default', ''db949z-120', ...
example 2: image = FatherImage(image=request.FILES['image'], alt='sea_food', sizes=['120', '240', '480']) image.save()
after .save, fatherimage and 3 imagesizes with 120, 240, 480 PXs is created. fatherimage.alt is like: 'sea_food-default'
image = FatherImage.objects.get(alt='sea_food-default')
image_sizes = image.imagesizes.all()
image_sizes contain 3 different size of original image. image_sizes[0].alt
is like: 'sea_food-120', image_sizes[1].alt
: 'sea_food-240', ...
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
Built Distribution
File details
Details for the file onetomultipleimage-1.0.2.tar.gz
.
File metadata
- Download URL: onetomultipleimage-1.0.2.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3cee271f6c6c5fb2fd608a18e35ccfbae82e5f9cb3e43419f0285f94c74e0eff |
|
MD5 | 57b95085c2792585c888762dfe1c23f9 |
|
BLAKE2b-256 | bf96229fe0e545f4ec6e914067f9ca5f11c7724feaa4eb40759de2039fc20777 |
File details
Details for the file onetomultipleimage-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: onetomultipleimage-1.0.2-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 749bd407ee1e9fc3df70fc9f5c4e47d1d921c9d7ab92227a3f0e7709e2c8059c |
|
MD5 | 00d98b76eaa116903a1ea25c70371bf7 |
|
BLAKE2b-256 | b1ab1f4e98700bdede176fdacc63fc2ac20e70400725d640aa6029d1c568fe42 |