Image.thumbnail - ไม่สามารถเปลี่ยนขนาดได้อย่างถูกต้อง

ฉันกำลังพยายามสร้างโมเดลข่าว โมเดลของฉันมี ImageField ซึ่งฉันจะไม่เก็บภาพขนาดย่อ:

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()

ฉันพบในโค้ดของไซต์อื่น และฉันได้แก้ไขมันตามความต้องการของฉัน:

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)

ปัญหาคือฉันไม่สามารถสร้างภาพขนาดย่อที่มีสัดส่วนความกว้างและความสูงต่างกันได้ เมื่อยกตัวอย่างการตั้งค่า thumb_size(240,320) ฉันจะได้สัดส่วนเดียวกันกับต้นฉบับ แต่รูปภาพจะเล็กกว่า ขอบคุณสำหรับคำแนะนำ

แก้ไข: ในเอกสารของ PIL ฉันพบประโยคที่น่าสนใจมากเกี่ยวกับวิธีการนั้น: "วิธีนี้จะแก้ไขรูปภาพให้มีรูปขนาดย่อของตัวเอง ซึ่งไม่ใหญ่กว่าขนาดที่กำหนด" แล้วจะมีตัวเลือกให้ขนาดเป๊ะขนาดนั้นมั้ย?


person Max    schedule 17.02.2016    source แหล่งที่มา


คำตอบ (2)


คุณสามารถลอง resize< /a> วิธีการ

และคุณสามารถสร้างภาพพื้นหลังใหม่ได้ (เอกสาร):

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

และวางภาพหลักของคุณลงบนภาพ โดยปรับขนาดอัตราส่วนไว้ image.thumbnail(thumb_size, Image.ANTIALIAS)

person KravAn    schedule 17.02.2016

คุณสามารถใช้: 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)))

อย่าลืมหมอนที่ติดตั้งไว้

pip install pillow
person erajuan    schedule 18.02.2016