2011-07-04 3 views
3

Je me demande comment implémenter au mieux un ImageField croppable dans Django.créer un champ d'image croppable - comment stocker les données du widget?

Fondamentalement, je voudrais télécharger des images et les recadrer. Par exemple, en utilisant imagAreaSelect

La première approche qui m'est venue à l'esprit était de créer un ImageField et quelques méta-champs sur mon modèle pour stocker le ratio de culture, la largeur et la hauteur de ma sélection. Mais je me demande s'il y a des façons plus propres de résoudre cela et d'encapsuler davantage le comportement de recadrage. Donc, en fin de compte, je voudrais envelopper le comportement souhaité dans un widget. Bien que le problème que je vois est que les widgets sont habituellement mappés à un seul champ de base de données.

Donc je me demande si c'est faisable du tout et comment mieux persister mes données d'image?

Répondre

3

Nous avons fini par créer une application réutilisable pour les images de culture: django-image-cropping

+0

l'application semble génial! Est-il possible d'inviter l'utilisateur à redimensionner et recadrer l'image? – Lara

1

Il existe plusieurs façons de procéder. Une façon consiste à déduire le nom de l'image recadrée du nom de l'image non recadrée. Donc, si vous avez un ImageField, et qu'il y a une image uploads/images/family.jpg, votre CropableImageWidget peut supposer que l'image recadrée est stockée sur uploads/images/cropped/family.jpg. L'autre manière consiste à créer votre propre type de champ de base de données qui stocke une représentation sérialisée de tous les fichiers que vous créez pendant le rognage. Peut être Via JSON.

+0

Hey Donald, Merci pour vos suggestions. Ce que je n'aime pas à propos de l'option 1, c'est que je dois encore créer un champ de téléchargement séparé. Et comme j'aimerais vraiment que cette fonctionnalité soit aussi encapsulée que possible, de sorte que, idéalement, je n'ai qu'à utiliser mon CropImageField dans ma définition de modèle et ne pas avoir à configurer d'autres choses. Pour sérialiser les données dans un seul champ est venu à l'esprit, mais encore une fois, je voudrais conserver la plupart des fonctionnalités de la ImageField régulière. Qu'est-ce que j'ai essayé et ce qui semble vraiment prometteur jusqu'à présent est d'utiliser un CompositeField (https://bitbucket.org/mp/django-composite-field) – arie

Questions connexes