Skip to main content

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

onetomultipleimage-1.0.3.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

onetomultipleimage-1.0.3-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file onetomultipleimage-1.0.3.tar.gz.

File metadata

  • Download URL: onetomultipleimage-1.0.3.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for onetomultipleimage-1.0.3.tar.gz
Algorithm Hash digest
SHA256 ec18d990e75c9aa35b9e9909a528787b64665646f215d6f29fc260715218b804
MD5 bca2c83d9a203c934ec5052c33e5cd8a
BLAKE2b-256 a4cf8fdb0228bb831f9f571b8b318efc0e9c2e41403eae448de8fe7b4f1b6195

See more details on using hashes here.

File details

Details for the file onetomultipleimage-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for onetomultipleimage-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2457c6ec2ccc027ac2eb387f1407dcf4541ee2dc44e2ce6135d4ae83e355876b
MD5 eebb549390bf70fdabc0b701c8d844d9
BLAKE2b-256 d392091f8eed8d3398bd3b76b07ba1d664d86628a35f0d15acc1545007fa4037

See more details on using hashes here.

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