Comment voulez-vous convertir un PIL `Image` avec un Django "Fichier"?
Je suis en train de convertir un UploadedFile
à un PIL Image
objet de vignette, puis convertir le PIL Image
objet que ma vignette fonction des retours en arrière dans un File
objet. Comment puis-je faire cela?
- Image de Django fichier?
- Un PIL
Image
instance de DjangoFile
instance. DjangoFile
est une sous-classe de PythonFile
classe. - python 3 solution ici stackoverflow.com/a/30435175/3033586
Vous devez vous connecter pour publier un commentaire.
La façon de le faire sans avoir à écrire de nouveau sur le système de fichiers, puis de mettre le fichier dans la mémoire via un appel ouvert, est de faire usage de StringIO et Django InMemoryUploadedFile. Voici un échantillon rapide sur comment vous pouvez le faire. Cela suppose que vous avez déjà un thumbnailed image nommée "pouce":
Laissez-moi savoir si vous avez besoin de plus de précisions. J'ai ce travail dans mon projet, le téléchargement de S3 en utilisant django-entrepôts. Ce qui m'a pris la meilleure partie de la journée pour bien trouver la solution ici.
StringIO
de travailler en Python 3? J'ai eu à utiliserBytesIO
(et depuis elle n'a pas un len() de la fonction, il fallait utiliser tell() pour déterminer sa longueur.BytesIO
tenter ma réponse ici stackoverflow.com/a/30435175/3033586 BTW commentaire précédent était dépassée et suppriméJ'ai dû le faire en quelques étapes, imagejpeg() en php nécessite un processus similaire. Pour ne pas dire theres aucun moyen de garder les choses en mémoire, mais cette méthode vous donne un fichier de référence à la fois à l'origine de l'image et du pouce (généralement une bonne idée dans le cas où vous devez revenir en arrière et changer votre pouce taille).
Modèle:
Utilisation:
C'est l'exemple réel de python 3.5 et django 1.10
dans views.py:
Mettre ensemble des commentaires et des mises à jour pour Python 3+
Ici est une application qui permet de le faire: django-smartfields
Assurez-vous de passer
keep_orphans=True
le champ, si vous souhaitez conserver les fichiers, sinon, ils sont nettoyés lors du remplacement.Pour ceux qui utilisent
django-storages/-redux
pour stocker le fichier image sur S3, voici le chemin que j'ai pris (l'exemple ci-dessous crée une miniature d'une image existante):À remplir pour ceux qui, comme moi, veulent coupler avec Django
FileSystemStorage
:(Ce que je fais ici est de télécharger une image, la redimensionner à 2 dimensions et enregistrez les deux fichiers.
utils.py
Dans views.py