Resize image in pil python

Python Pillow – Resize Image

To resize an image with Python Pillow, you can use resize() method of PIL.Image.Image Class. You can pass parameters like resulting image size, pixel resampling filter and the box region of source to be considered.

In this tutorial, we shall learn how to resize an image using PIL, with example Python programs.

Syntax of PIL Image.resize()

The syntax of resize() method is as shown in the following code snippet.

Image.resize(size, resample=0, box=None)
  • size is to passed as tuple (width, height). This is the size requested for the resulting output image after resize.
  • resample is the filter that has to be used for resampling. It is optional. You can pass:
    • PIL.Image.NEAREST
    • PIL.Image.BOX
    • PIL.Image.BILINEAR
    • PIL.Image.HAMMING
    • PIL.Image.BICUBIC
    • PIL.Image.LANCZOS

    With proper values provided to size parameter, you can either downsize or enlarge the input image.

    Examples

    1. Resize an image with default values

    In the following example, we will read an image and resize it to (200, 200).

    Python Prgoram

    from PIL import Image #read the image im = Image.open("sample-image.png") #image size size=(200,200) #resize image out = im.resize(size) #save resized image out.save('resize-output.png')

    Input image: sample-image.png

    Python Pillow - Adjust Image Brightness - Brighten the image

    Output Image – resize-output.png

    Python Pillow – Resize Image

    The whole source image is considered for resize, as we have not provided any value for box parameter. In the next example, we will provide the box parameter and find the output image.

    2. Resize image with only box of the input image

    In the following example, we will provide the box parameter. By this we consider only the box area of the input image and then resize it to size.

    Python Program

    from PIL import Image #read the image im = Image.open("sample-image.png") #image size size = (200,200) box = (100,100,500,400) #resize image out = im.resize(size, box=box) #save resized image out.save('resize-output.png')

    Output Image – resize-output.png

    Python Pillow – Resize Image

    If you observe, only the box part of input image is considered for the resize action.

    Summary

    In this tutorial of Python Examples, we learned how to resize an image, using PIL Python library.

    Источник

    Меняем размер изображения в Python Pillow с обрезанием и изменением ширины и высоты

    Изменение размера картинки в Python с Pillow (PIL) с resize() и crop() и другими методами

    В Python есть много библиотек по работе с изображениями. Одна из самых известных библиотек — Pillow (ранее PIL). В этой статье будут рассмотрены примеры по изменению размеров картинки с помощью увеличения и уменьшения картинки, а так же обрезания.

    Pillow не является стандартной библиотекой и устанавливается отдельно:

    Получение размеров

    Для получения размера картинки мы должны открыть ее (создать объект класса Image) и получить атрибут ‘size’. Это можно сделать так:

    from PIL import Image image_path = 'F:/hello.png' img = Image.open(image_path) # получаем ширину и высоту width, height = img.size print(width, height) # открываем картинку в окне img.show()

    Получение ширины и высоты картинки в Python Pillow

    Изменение размера изображения с resize()

    Для изменения ширины и высоты есть метод ‘resize’. Этот метод не изменяет текущую картинку, а возвращает новую. Новый размер мы должны указать в виде кортежа ‘(ширина, высота)’. Сохранить картинку можно через метод ‘save’:

    from PIL import Image image_path = 'F:/hello.png' img = Image.open(image_path) # изменяем размер new_image = img.resize((200, 385)) new_image.show() # сохранение картинки new_image.save('F:/hello2.png')

    Изменение размера картинки в Python Pillow

    На примере выше видно, что картинка меняется не пропорционально. Это можно изменить двумя способами:

    Учет соотношения сторон

    Что бы создать пропорциональную картинку вам нужно определиться с размером одно из сторон. В примере ниже указана фиксированная ширина, но вы можете немного изменить скрипт и указать высоту. Мы должны вычислить процентное соотношение старой ширины к новой, а затем умножить ее на высоту:

    from PIL import Image image_path = 'F:/hello.png' # указываем фиксированный размер стороны fixed_width = 200 img = Image.open(image_path) # получаем процентное соотношение # старой и новой ширины width_percent = (fixed_width / float(img.size[0])) # на основе предыдущего значения # вычисляем новую высоту height_size = int((float(img.size[0]) * float(width_percent))) # меняем размер на полученные значения new_image = img.resize((fixed_width, height_size)) new_image.show() new_image.save('F:/hello2.png')

    Пропорциональное изменение размера изображения в Python Pillow

    Создание эскиза thumbnail

    Есть еще один способ выполнить предыдущие шаги автоматически — он называется ‘thumbnail’. Его отличие от resize() в том, что он не может увеличить размер изображения. Если с помощью resize() вы можете изменить размер 200х200 на 400х400, то метод thumbnail() оставит исходный.

    В методе ‘thumbnail()’ создается кортеж с 2-мя числами: максимальная ширина и высота. Понятие «максимальный» нужно оценивать как значение, которое можно менять в меньшую сторону. Если вы возьмете картинку размером 100х100 и захотите ее уменьшить до 100х50, то Pillow высчитает оптимальны размер как 50х50.

    from PIL import Image image_path = 'F:/hello.png' img = Image.open(image_path) # пропорциональное изменение картинки img.thumbnail(size=(350,400)) img.show() img.save('F:/hello3.png')

    Создание мини-изображение с методом thumbnail в Python Pillow

    Обрезание (cropping) картинки

    Для обрезания ненужных частей картинки используется метод ‘crop()’. Внутри этого метода помещается кортеж со значениями (отступами) соответствующие сторонам, которые нужно обрезать. Стороны можно определить следующими переменными:

    Оси x1 и y1 находятся в левой верхней части изображения, а оси x2 и y2 в правой нижней. Левая верхняя часть имеет координаты 0 и 0, а правая нижняя соответствует ширине и высоте изображения. Картинка, которую я использовал в предыдущих примерах, имеет размер 401х385. Если распределить все координаты, соответствующие этой картинке, получится следующий результат:

    Оси при обрезании изображения с crop() в Python Pillow

    Представим, что нам нужно обрезать название на картинке — это примерно 60px. Мы должны вычесть (вырезать) это значение из нижнего правого угла (высоты):

    from PIL import Image image_path = 'F:/hello.png' img = Image.open(image_path) size = img.size width, height = img.size # обрезаем картинку new_image = img.crop((0,0,width,height-60)) new_image.show() new_image.save('F:/hello3.png') 

    Обрезание изображения с crop() в Python Pyllow

    Если бы мы хотели оставить только название, то нужно было бы изменить значение y1 (2-ой индекс):

    Обрезание изображения с crop() в Python Pyllow

    Создание границ картинки и ее увеличение за счет новой области

    Увеличить размер изображения, не растягивая ее (как делает resize()), можно тремя методами.

    Первый, который так же обсуждался в предыдущей части статьи, увеличит изображение без возможности изменения фона (в зависимости от изображения он может быть черным/прозрачным). В примере ниже мы добавим по 50px к каждому углу:

    Расширение картинки в Python Pillow

    Второй способ — за счет создания нового изображения и вставки в него старого.

    Для создания нового изображения нужно использовать метод ‘Image.new()’. В этом методе мы должны указать тип картинки, ее ширину и высоту, а так же цвет. Что бы вставить изображение — используется метод ‘paste()’. В нем указывается отступ формата ‘(верх, лево)’ либо вы можете использовать координаты аналогичные методу ‘crop()’.

    В следующем примере мы создадим изображение, которое будет на 50px больше и вставим в него старую картинку. Картинка будет располагаться в 25px от верхнего и левого края:

    from PIL import Image image_path = 'F:/hello.png' old_img = Image.open(image_path) # создание нового изображения new_image = Image.new(old_img.mode, (old_img.size[0]+50, old_img.size[1]+50), 'white') # вставляем старой изображение в новое new_image.paste(old_img, (25, 25)) new_image.show() new_image.save('F:/hello3.png') 

    Добавление границ и заднего фона в Python Pyllow

    Создание границ изображения с ImageOps.expand

    Создать границы картинки (расширить) так же можно через метод ImageOps.expand(). Вообще через модуль ‘ImageOps’ можно проделать все шаги описанные выше, но он может не работать с какими-то типами изображений.

    В метод ‘expand()’ мы должны передать объект ‘Image’, размер границы и цвет. Пример с результатом аналогичным предыдущему:

    from PIL import Image from PIL import ImageOps image_path = 'F:/hello.png' old_img = Image.open(image_path) # создание нового изображения с белым фоном new_image = ImageOps.expand(old_img, border=25, fill=(255,255,255)) new_image.show() new_image.save('F:/hello3.png') 

    Источник

    Читайте также:  Python linux docx to pdf
Оцените статью