2016-04-18 1 views
1

Ich möchte das Bild in der Größe ändern und es in der Datenbank unter Django speichern. Ich fand mehrere Websites erwähnt über Größe von Django, einige schreiben in models.py, aber die anderen schreiben in views.py. In welcher Datei sollte ich Codes schreiben, views.py oder models.py?In welcher Datei sollte ich Codes schreiben, um die Bilddatei auf Django zu skalieren?

from PIL import Image 
img = Image.open('original.jpg', 'r') 
img.thumbnail((100, 100), Image.ANTIALIAS) 
img.save('thumbnail.jpg', 'JPEG', quality=75, optimize=True) 

models.py

class Photo(models.Model): 
    photo = models.ImageField(upload_to="...") 
    def save(self, *args, **kwargs): 
     do_somehting() 
     super(Photo, self).save() 
+1

Es gibt keine endgültige Antwort darauf. Wann wird die Bildgröße geändert? Beim Laden der Seite? Auf Artikel speichern? Sie können diesen Code immer in eine separate Py-Datei einfügen. Es hängt alles davon ab, wie Sie Ihren Code organisieren möchten. – Wtower

+0

@Wtower Vielen Dank für Ihre Antwort. Entschuldigung, meine Frage war unklar. Zum Beispiel tritt es auf, wenn ein Benutzer sein Foto hochlädt. – yamachan

+1

Werfen Sie einen Blick auf diese, deckt auch Ihre Frage: http://stackoverflow.com/questions/1164930/image-resizing-with-django – Wtower

Antwort

1

Sie imagekit dafür nutzen könnte, zum Beispiel:

from django.db import models 
from imagekit.models import ProcessedImageField 
from imagekit.processors import Resize 

class SomeModel(models.Model): 
    ... 
    photo = models.ProcessedImageField(upload_to="...", processors=[Resize(650, 402)) 

in Ihren Modellen scheint besser, da das Bild wird (in Ihrer Website immer der Größe verändert werden Aktionen und im Admin-Panel).

+1

Vielen Dank, dass Sie mir Imagekit mitgeteilt haben. Ich bin jetzt draußen, also werde ich es später versuchen. Vielen Dank. – yamachan

2

Ich denke, die beste Vorgehensweise ist, wenn Sie Hintergrundjobs wie celery oder etwas anderes verwenden, und rufen Sie es im Modell speichern Modus.

Es ist besser Pillow Paket zu verwenden und sorl und seine thumbnail es jede Größe Thumbnail und Index über redis

Betrachten Sie diesen Kern automatisch zu machen:

import picke 
create_thumbnail_images.apply_async([pickle.dumps(self.image_path), USER_IMAGE_THUMB_SIZES], countdown=5) 

Sie können kann über Beispielcode in save Aktion Ihres Modells, um Thumbnails im Hintergrund zu erstellen, sodass Sie nie für das Erstellen dieser Thumbnails blockiert werden.

+1

Entschuldigung für die späte Antwort. Ich benutze Redis, also ist Sorl nett. Ich danke dir sehr. – yamachan

+0

@yamachan wenn es geholfen hat, ich schätze es zu beantworten –

Verwandte Themen