2015-12-07 3 views
2

У меня есть следующие функции для обрезки изображения:Python PIL культуры не обрезать изображение

def crop(original_image): 


    original_image = Image.open(original_image) 
    original_image.crop((25, 25, 50, 50)) 
    #original_image.load() 

    thumb_io = StringIO.StringIO() 
    original_image.save(thumb_io, format='JPEG') 

    thumb_file = InMemoryUploadedFile(thumb_io, None, 'foo2.jpg', 'image/jpeg', 
            thumb_io.len, None) 


    return thumb_file 

Изображения сэкономленного только исходное изображение без каких-либо правок размера. Я пробовал как с нагрузкой, так и с нагрузкой, но это не изменило ситуацию.

Исходное изображение 300 х 450.

Что я делаю не так, что изображение не сохраняется ни с одной из кадрирования?

ответ

4

изменить эту строку:

original_image = original_image.crop((25, 25, 50, 50)) 

, поскольку возвращаемое значение функции растениеводства является Прямоугольник область, но не сохранить его!

0

Похоже, что мне нужно, чтобы извлечь возвратную растениеводство значение из переменной:

img_io = StringIO.StringIO() 
    original_image = Image.open(original_image) 
    new_image = original_image.crop((20, 20, 125, 125)) 
    new_image.save(img_io, format='JPEG', quality=100) 
    img_content = ContentFile(img_io.getvalue(), 'foo6.jpg') 

    return img_content 
+0

Действительно, функция crop возвращает новый объект изображения. Исходное изображение не тронуто. Не забудьте отметить ответ, который приведет вас к этому как «принятый ответ» ;-) –

0

вам, возможно, потребуется изменить строку

thumb_file = InMemoryUploadedFile(thumb_io, None, 'foo2.jpg', 'image/jpeg', 
           thumb_io.len, None) 

в

thumb_file = ContentFile(thumb_io.getvalue(), 'foo2.jpg') 

Я предполагаю, что вы планировали сохранить файл изображения в свой db