Почему загруженные изображения в моем проекте Django имеют больший размер файлов, чем исходные изображения? И как мне их сжать?
Я работаю над проектом, который получает в Django загруженное пользователем изображение из Javascript через fetch API. Пользователь загружает изображения для каждой плитки в пользовательской сетке.
Мне удалось заставить мое приложение работать, но я заметил, что загруженные изображения плиток (все в соотношении 1:1) имеют гораздо больший размер файлов, чем те, которые загружаются на самом деле. Почему так происходит?
Я использую cropper.js для обрезки и сохранения файлов на фронтенде. Интересно, может ли это повлиять на размер файлов таким образом?
Кроме того, как мне сжать изображения перед сохранением, чтобы сэкономить место в памяти? Я пробовал переопределить метод сохранения Pillow, как упоминалось в других сообщениях, но не смог заставить его работать. Вот часть моего кода:
Пониженная версия представления, которая получает и сохраняет изображение плитки:
def add_image(request, tile_id):
# Query for requested tile
try:
tile = Tile.objects.get(pk=tile_id)
except Tile.DoesNotExist:
return JsonResponse({"error": "Tile not found."}, status=404)
if request.method == "POST":
image = request.FILES.get("image")
if image is not None:
print(f"Image received: {image}")
# Add image to tile
tile.image = image
tile.save()
tiles = Tile.objects.select_related("grid").filter(grid=grid).all()
return JsonResponse({
"tiles": [tile.serialize() for tile in tiles],
}, safe=False)
else:
return JsonResponse({"error": "Image not added."}, status=404)
else:
return JsonResponse({
"error": "POST request required."
}, status=400)
Из models.py
class Tile(models.Model):
timestamp = models.DateTimeField(default=timezone.now)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_tiles")
image = models.ImageField(upload_to=myproject/img, default="../static/myproject/default.svg")