Да, это происходит и со мной. Это было для меня учебным упражнением, потому что я никогда не обрезал и не создавал эскизы, используя PIL ...
не
уменьшенные изображения (размер, фильтр = None)
Заменяет исходное изображение на место новым изображением заданного размера (стр. 2). Необязательный
Аргумент фильтра работает так же, как и в методе .resize ().
Соотношение сторон (высота: ширина) сохраняется этой операцией. Полученное изображение будет таким же большим
насколько это возможно, при этом не выходя за пределы заданного размера. Например, если изображение имеет размер (400,150), его
размер после im.thumbnail ((40,40)) будет (40,15) .
Итак, что происходит
- Вы используете миниатюру, которая поддерживает
аспект
- Вы ожидаете
изображение будет 40 х 40
- Вы обрезаете сверх фактического размера миниатюры
- Черная полоса, скорее всего, снизу из-за обрезки сверх размера
Код, который я написал, чтобы повторить вопрос:
def croptest(file, width, height):
import Image as pil
import os
max_width = width
max_height = height
file, ext = os.path.splitext(file)
img = pil.open(file)
img.thumbnail((max_width, max_height), pil.ANTIALIAS)
img.save(file + ".thumb.jpeg", 'JPEG')
croppedImage = img.crop((10, 10, 40, 40))
croppedImage.save(file + ".croppedthumb.jpeg", 'JPEG')
if __name__ == "__main__":
croptest("Desktop.bmp", 50, 50)
Desktop.thumb.jpeg был 50 x 37, тогда как Desktop.croppedthumb.jpeg был 30 x 30, поэтому у меня была черная линия высотой 3 пикселя внизу.
Ваше решение будет заключаться в том, чтобы обрезать внутри фактического размера миниатюры или выяснить, как создать миниатюру, игнорируя соотношение сторон.