Gambar.thumbnail - tidak dapat mengubah ukuran dengan benar

Saya mencoba membuat model untuk berita. Model saya berisi ImageField tempat saya tidak akan menyimpan thumbnail:

class News(models.Model):
    title = models.CharField(verbose_name=u'tytuł', max_length=40)
    lead = models.TextField(verbose_name=u'zajawka', blank= False)
    body = models.TextField(verbose_name=u'treść ogłosznia', blank=False)
    author = models.ForeignKey(User)
    active = models.BooleanField(verbose_name=u'aktywność ogłoszenia')
    pub_date = models.DateTimeField(verbose_name=u'data publikacji')
    slug = models.SlugField(unique=True)
    lead_photo= models.ImageField(upload_to="lead_photo/")
    objects= NewsManager()

Saya menemukan kode situs lain dan saya memodifikasinya sesuai kebutuhan saya:

def save(self, force_update=False, force_insert=False, thumb_size=(120,120)):
    from PIL import Image
    from cStringIO import StringIO
    from django.core.files.uploadedfile import SimpleUploadedFile
    image = Image.open(self.lead_photo)

    if image.mode not in ('L', 'RGB'):
        image = image.convert('RGB')

    image.thumbnail(thumb_size, Image.ANTIALIAS)

    # save the thumbnail to memory
    temp_handle = StringIO()
    image.save(temp_handle, 'JPEG')
    temp_handle.seek(0) # rewind the file

    # save to the thumbnail field
    suf = SimpleUploadedFile(os.path.split(self.lead_photo.name)[-1],
                             temp_handle.read(),
                             content_type='image/jpeg')
    self.lead_photo.save(suf.name+'.png', suf, save=False)

    # save the image object
    super(News, self).save(force_update, force_insert)

masalahnya saya tidak bisa membuat thumbnail dengan proporsi lebar dan tinggi yang berbeda. Misalnya satu set thumb_size(240,320) saya akan mendapatkan proporsi yang sama seperti aslinya tetapi gambarnya lebih kecil. Terima kasih atas sarannya.

Sunting: Pada dokumentasi PIL saya menemukan kalimat yang sangat menarik tentang metode itu: "Metode ini memodifikasi gambar agar memuat versi thumbnail itu sendiri, tidak lebih besar dari ukuran yang diberikan." Jadi apakah ada pilihan untuk membuatnya sesuai ukuran itu?


person Max    schedule 17.02.2016    source sumber


Jawaban (2)


Anda dapat mencoba resize< /a> metode.

Dan sebagai varian Anda dapat membuat gambar latar belakang baru (dokumen):

newImage = Image.new(resized.mode, resized.size, "black")

dan letakkan gambar utama Anda di atasnya dengan menjaga rasio aspek diubah sebesar image.thumbnail(thumb_size, Image.ANTIALIAS).

person KravAn    schedule 17.02.2016

Anda dapat menggunakan: http://djangothumbnails.com/

from django.db import models
from thumbs import ImageWithThumbsField

class Person(models.Model):
    photo = ImageWithThumbsField(upload_to='images', sizes=((125,125),(200,200)))

Jangan lupa pasang bantal

pip install pillow
person erajuan    schedule 18.02.2016