1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import io
- from PIL import Image
- from django.core.files.images import ImageFile
- from .utils import get_file_hash
- IMAGE_TYPES = ("image/gif", "image/png", "image/jpeg", "image/bmp", "image/webp")
- THUMBNAIL_SIZE = (32, 32)
- def create_media(theme, media):
- if media_exists(theme, media):
- delete_media(theme, media)
- if media_is_image(media):
- save_image(theme, media)
- else:
- save_media(theme, media)
- def media_exists(theme, media):
- return theme.media.filter(name=media.name).exists()
- def delete_media(theme, media):
- theme.media.get(name=media.name).delete()
- def media_is_image(image):
- return image.content_type in IMAGE_TYPES
- def save_image(theme, image):
- try:
- img = Image.open(image.file)
- except Exception: # pylint: disable=broad-except
- return
- else:
- width, height = img.size
- theme.media.create(
- name=image.name,
- file=image,
- hash=get_file_hash(image),
- type=image.content_type,
- width=width,
- height=height,
- size=image.size,
- thumbnail=get_image_thumbnail(img, image.name),
- )
- img.close()
- def get_image_thumbnail(image, src_name):
- img = image.copy()
- img.thumbnail(THUMBNAIL_SIZE)
- file = io.BytesIO()
- img.save(file, format="png")
- img.close()
- filename = ".".join(src_name.split(".")[:1])
- return ImageFile(file, name="thumb_%s.png" % filename)
- def save_media(theme, media):
- theme.media.create(
- name=media.name,
- file=media,
- hash=get_file_hash(media),
- type=media.content_type,
- size=media.size,
- )
|