GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Python 3
  • Скачать Python
  • IDE
  • Скачать PyCharm
  • Django
  • Tkinter
  • Книги

This view

  • Original page
  • New address

GeezerVison is showing python-scripts.com — Обрезка изображения в Python, используя библиотеку Pillow

Обрезка изображения в Python

Модуль Image из библиотеки для обработки изображений Pillow (PIL) предоставляет функцию crop() для обрезки части изображения по указанным координатам.

Далее мы напишем код для решения следующих задач:

  • Обычная обрезка картинки;
  • Обрезка изображения за пределами её размеров;
  • Обрезка центральной части картинки;
  • Обрезка наиболее крупного квадрата из прямоугольника, миниатюра для записи на блоге.

Содержание статьи

  • Простая обрезка изображения в Pillow
  • Обрезка изображения за её пределами
  • Обрезка изображения по центру в PIL
  • Вырезаем квадрат из прямоугольника

Установка библиотеки PIL

Shell
1
pip install --upgrade Pillow

При желании создать изображение с прозрачным фоном, обрезав какую-то другую форму, помимо прямоугольника (к примеру, круг), можно использовать putalpha().

Связанная статья: Создание изображения с прозрачным фоном

Импортируем Image из PIL и откроем нужное изображение. Вы можете сохранить ниже предоставленную картинку под названием guido-van-rossum.jpg и начать работу с ней.

Python
1
2
3
4
from PIL import Image
 
im = Image.open('guido-van-rossum.jpg')
img.show()

Как обрезать часть изображения в Python (библиотека Pillow)

Простая обрезка изображения в Pillow

Обозначим область обрезки изображения с помощью кортежа box=(left, upper, right, lower).

Верхней левой координате соответствует (x, y) = (left, upper), а нижней правой — (x, y) = (right, lower). Область, которую нужно обрезать — left <= x <right и upper <= y <lower, а пиксели x = right и y = lower не включаются.

Не забудьте, что box используется вместе со скобками ().

Python
1
2
3
4
5
6
from PIL import Image
 
 
im = Image.open('guido-van-rossum.jpg')
im_crop = im.crop((100, 75, 300, 150))
im_crop.save('guido_pillow_crop.jpg', quality=95)

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

Python
1
im.crop((100, 75, 300, 150)).save('guido_pillow_crop.jpg', quality=95)

Как обрезать часть изображения в Python (библиотека Pillow)

Обрезка изображения за её пределами

Если область за пределами размеров картинки включается в область обрезки, ошибок не будет — данная часть изображения просто будет окрашена в черный цвет.

Python
1
2
3
4
5
6
from PIL import Image
 
 
im = Image.open('guido-van-rossum.jpg')
im_crop_outside = im.crop((100, 175, 300, 250))
im_crop_outside.save('guido_pillow_crop_outside.jpg', quality=95)

Как обрезать часть изображения в Python (библиотека Pillow)

Обрезка изображения по центру в PIL

Если вы хотите вырезать центр изображения определенного размера, то функция crop_center поможет в решении этой задачи:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from PIL import Image
 
 
def crop_center(pil_img, crop_width: int, crop_height: int) -> Image:
    """
    Функция для обрезки изображения по центру.
    """
    img_width, img_height = pil_img.size
    return pil_img.crop(((img_width - crop_width) // 2,
                         (img_height - crop_height) // 2,
                         (img_width + crop_width) // 2,
                         (img_height + crop_height) // 2))
 
 
im = Image.open('guido-van-rossum.jpg')
im_new = crop_center(im, 200, 200)
im_new.save('guido_crop_center.jpg', quality=95)

Как обрезать часть изображения в Python (библиотека Pillow)

Вырезаем квадрат из прямоугольника

При создании миниатюр записей для блога на Django, зачастую требуется вырезать максимально возможный квадрат из прямоугольного изображения.

Создаем функцию, которая обрезает квадрат из центра прямоугольного изображения:

Python
1
2
def crop_max_square(pil_img):
    return crop_center(pil_img, min(pil_img.size), min(pil_img.size))

Пример использования данной функции:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from PIL import Image
 
 
def crop_center(pil_img, crop_width: int, crop_height: int) -> Image:
    """
    Функция для обрезки изображения по центру.
    """
    img_width, img_height = pil_img.size
    return pil_img.crop(((img_width - crop_width) // 2,
                         (img_height - crop_height) // 2,
                         (img_width + crop_width) // 2,
                         (img_height + crop_height) // 2))
 
 
def crop_max_square(pil_img):
    return crop_center(pil_img, min(pil_img.size), min(pil_img.size))
 
 
im = Image.open('guido-van-rossum.jpg')
im_new = crop_max_square(im)
im_new.save('guido_crop_max_square.jpg', quality=95)

Результатом этого кода будет данная картинка:

Как обрезать часть изображения в Python (библиотека Pillow)

Vasile Buldumac

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: [email protected]

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.