Pracuję z Pillow, Django i django-imagekit.Jak przekonwertować obraz do określonego rozmiaru pliku?
Szukam, aby móc mieć pole modelu obrazu profilowego (prawdopodobnie przy użyciu klasy ProcessedImageField
z imagekit), które będzie pobierać dowolny obraz, konwertować do formatu JPEG, przycinać do rozmiaru 150 x 150 i tworzyć jego rozmiar 5 KB.
Pierwsze dwa są proste:
profile_picture = imagekit.models.ProcessedImageField(upload_to=get_profile_picture_file_path,
format='JPEG',
processors=[ResizeToFill(height=150, width=150)]
)
Ale w jaki sposób można upewnić się, że rozmiar pliku jest 5KB? Mógłbym użyć czegoś takiego jak parametr options={'quality': 60}
w ProcessedImageField
, ale wydaje się, że jest to tylko względne w stosunku do oryginalnego rozmiaru pliku (według mojej wiedzy).
Rozwiązania nie muszą używać django-imagekit, ale byłoby to preferowane.
jest to dobry początek na sprawdzeniu, czy plik jest zbyt duży, ale logika w 'do_something_further_image_processing_to_decrease_size' jest naprawdę odpowiednia część pytania. Jak możesz zapewnić, że zmniejszasz rozmiar pliku do określonego rozmiaru za każdym razem (nawet przy obrazach o różnych rozdzielczościach/jakości JPEG)? – dcgoss
Prawdopodobnie dodaję tutaj funkcję iteracyjną, która zmniejsza rozdzielczość o 10% lub inny współczynnik odpowiadający bieżącemu rozmiarowi produkowanego obrazu w każdej iteracji. 'PIL' daje taką możliwość. – Magnar