Sto lavorando con Pillow, Django e django-imagekit.Come convertire un'immagine in una dimensione di file specifica?
Sto cercando di avere un campo modello immagine del profilo (probabilmente usando la classe ProcessedImageField
da imagekit) che prenderà qualsiasi immagine, convertirà in JPEG, la ritaglia in 150x150, e renderà le sue dimensioni del file 5KB.
I primi due sono facili:
profile_picture = imagekit.models.ProcessedImageField(upload_to=get_profile_picture_file_path,
format='JPEG',
processors=[ResizeToFill(height=150, width=150)]
)
ma come faccio a garantire la dimensione del file è di 5 KB? Potrei usare qualcosa come il parametro options={'quality': 60}
in ProcessedImageField
, ma ciò sembra essere solo relativo alla dimensione del file originale (a mia conoscenza).
Le soluzioni non devono utilizzare django-imagekit, ma sarebbe preferibile.
Questo è un buon inizio nel verificare che il file è troppo grande, ma la logica di 'do_something_further_image_processing_to_decrease_size' è davvero la parte rilevante della questione. Come puoi assicurarti di ridurre le dimensioni del file a una dimensione specifica, ogni volta (anche con immagini di risoluzioni/qualità JPEG diverse)? – dcgoss
Probabilmente aggiungerò qui una funzione iterativa che diminuisce la risoluzione del 10% o un altro fattore corrispondente alla dimensione corrente dell'immagine prodotta ogni iterazione. 'PIL' ti dà questa possibilità. – Magnar