2009-11-20 3 views

Répondre

3

Il y a 1 choses à noter au début ici:

  • dans votre modèle (base de données), il vaut mieux sauver les chemins vers les images, pas les images elles-mêmes. Celles-ci devraient être conservés dans le système de fichiers et servi directement à partir de là, si possible (à moins que vous n'avez pas l'accès au système de fichiers).

Alors, à votre avis, vous devez faire ce qui suit:

  1. Save the,
  2. quelque part le fichier téléchargé (sauf si il est enregistré alredy, alors vous avez son chemin, goto 2) Mettre la chemin de l'image originale à base de données,
  3. redimensionnez, en
  4. Enregistrez l'image redimensionnée au système de fichiers,
  5. Enregistrer le chemin vers l'image redimensionnée à votre base de données.

A propos des points 3 et 4, je le fais comme ça:

orig_img = Image.open(self.imageFile) 
orig_img_dim = orig_img.size # (orig_img_dim[0], orig_img_dim[1]) is (y, x) size of image 
if (orig_img_dim[0] > 600) or (orig_img_dim[1] > 1000): # only resize images too large 
    orig_img.thumbnail((600, 1000), Image.ANTIALIAS) 
orig_img.save(DESTINATION_FILENAME) 

Notez que je ne remets à la côte des images trop grandes (plus grande que la taille « miniature »).

+0

Et enregistrer au modèle django – Oduvan

8

SORL a de grandes capacités de thumbnailing qui peuvent également être utilisés dans les modèles ... il vérifiera également si une image est déjà dans le système de fichiers, sinon il va créer le nouveau fichier redimensionnée .

dépend vraiment où vous essayez d'appeler l'image à partir.

http://thumbnail.sorl.net/docs

def image_thumb(self): 
    thumb = DjangoThumbnail(self.image_file, (380, 246)) 
    return '<img src="%s" alt="%s" border="0" />' % (thumb.absolute_url, self.alt) 
image_thumb.allow_tags = True 

def get_thumb_url(self): 
    thumb = DjangoThumbnail(self.image_file, (380, 246)) 
    return thumb.absolute_url 

Aussi comme je l'ai, vous pouvez appeler directement à partir du modèle pour charger une image.

{% load thumbnail %} 
{% thumbnail url 100x100 crop,upscale %} 

Il est évident que vous appellerez la charge en haut de votre dossier et la vignette où que vous le souhaitez pour à apparaître. La grande chose à ce sujet aussi est que vous pouvez remplacer l'URL avec des objets python comme celui

{% thumbnail image.get_absolute_url 150x150 crop %} 

La taille est explicite J'espère et la récolte finale, haut de gamme sont des fonctions de SORL-miniature qui aura divers effets sur l'image finale.

+1

D'accord. Plus d'infos ici: http://thumbnail.sorl.net/docs/ –

+1

Intéressant. Merci de mentionner sorl-thumbnail. – ayaz

+1

Gardez à l'esprit que sorl ne fonctionne pas avec les backends de stockage personnalisés. vous voudrez peut-être consulter django-imagekit ou django-nailbiter si vous utilisez quelque chose comme S3 pour le stockage. – Carson

3

utilisation SORL - http://thumbnail.sorl.net/docs/

pour vous TÂCHE See this

class MyModel(models.Model): 
    name = models.TextField(max_length=50) 
    photo = ImageWithThumbnailsField(
       upload_to='profiles', 
       thumbnail={'size': (50, 50)}, 
       extra_thumbnails={ 
         'icon': {'size': (16, 16), 'options': ['crop', 'upscale']}, 
         'large': {'size': (200, 400)}, 
       }, 
) 

Ce code fait tout ce que vous voulez

+0

excellent exemple c'est génial si elle doit être utilisée dans le modèle directement lui-même –

1

Django Imagekit vous permet de spécifier plusieurs tailles d'image.Les images redimensionnées sont mises en cache, vous pouvez ensuite y accéder et le fichier d'image d'origine dans vos vues et modèles.

Questions connexes