Для начала установим PIL. Обратите внимание, что PIL, больше не поддерживается, вместо него сейчас можно найти «дружеское ответвление» Pillow. Чтобы установить PIL на Debian, выполните следующую команду в терминале от root’a:
aptitude install python-imaging
Я использовал PIL для строгово изменения размера изображения 64х64 для аватаров пользователей.
from PIL import Image
img = Image.open('image.png')
width = 64
height = 64
resized_img = img.resize((width, height), Image.ANTIALIAS)
resized_img.save(image.png)
Вот так очень просто мы поменяли размер изображения на 64×64.
Так же мне в дальнейшем мне понадобилось изменять размер изображения с сохранение пропорций. И тут также мне на помощь пришел PIL.
Код для изменения размера изображения с сохранением пропорций:
from PIL import Image
width = 750
img = Image.open('image.jpg')
ratio = (basewidth / float(img.size[0]))
height = int((float(img.size[1]) * float(ratio)))
img = img.resize((basewidth, height), PIL.Image.ANTIALIAS)
img.save('resized_image.jpg')
Вот так с помощью PIL мы в несколько строк изменили размер изображения (image.jpg) до ширины в 750 пикселей. Данную ширину мы установили в переменной width. Высота, пропорциональная ширине вычисляется путем определения, соотношения оригинальной ширины изображения (img.size [0]) к величине указанной в переменной width (в нашем случае 300px), а затем умножением этой величины на исходную высоту изображения (img.size [1]). Полученное значение высоты хранится в переменной height.
Итак управляя переменной width, можно получать любые другие размеры итогового изображения. Так же обратите внимание, что я сохранил исходное изображение по именем resized_image.jpg, в случае необходимости его дальнейшего использования. В случае если исходное изображение больше не нужно — можно перезаписать полученное изображение с таким же именем.
Чтобы оставить высоту изображения фиксированной и пропорционально изменять ее ширину, немного изменим код.
height = 300
img = Image.open('image.jpg')
ratio = (baseheight / float(img.size[1]))
width = int((float(img.size[0]) * float(hpercent)))
img = img.resize((width, height), PIL.Image.ANTIALIAS)
img.save('resized_image.jpg')
Обратите внимание. Здесь для вычисления соотношения высоты мы обращаемся не к img.size [0], а к img.size [1]. Атрибут size является кортежем хранящим ширину в первом элементе [0] и высоту во втором [1].
Вот и все. И это далеко не все возможности PIL.
Самое главное — побороть боязнь белого листа. Я всегда говорю это себе, когда нужно начать…
По не вполне ясным причинам, Firefox умеет проверять орфографию либо только в русских, либо только…
Около месяца собирал разные «хаки» на языке программирования Perl. Эта подборка наглядно демонстрирует, как в…
C недавних пор я стал увлекаться SEO. Порой передо мной встает задача быстро проверить индекс…
Недавно написал несколько скриптов, позволяющих автоматически определять, какая CMS (Content Management System, система управления контентом)…
Я так подозреваю, что среди вас найдется те, кто скажет, что этот пост боян и…