Как назначить пиксели для каждой части изображения? - PullRequest
0 голосов
/ 03 апреля 2020

Я пишу функционал, который будет применять эффект калейдоскопа к изображению. Таким образом, исходное изображение и изображение с примененным эффектом выглядят как эти два изображения ниже (в самом низу) соответственно.

Я не могу импортировать ничего, кроме импорта изображения из PIL. Но я уже написал несколько функций, которые помогают с эффектами, таких как (1) resize_image, который изменяет размер изображения до четвертого размера, (2) flip_horizontally, который горизонтально переворачивает изображение (верхний левый квадрант), (3) flip_vertically, который Вертикально переворачивает изображение (нижний правый квадрант) и объединяет две предыдущие функции, чтобы получить верхнее правое квадрантное изображение второго изображения.

Моя идея состоит в том, чтобы создать новое изображение, используя

new_img = Image.new("RGB", (img_height, img_width))

, а затем в основном "вставить" четыре изображения из каждого квадранта в новое изображение, используя четыре отдельных вложенных цикла for, но вопрос Как разделить new_img на четыре квадранта, а затем вставить четыре изображения в каждый квадрант?

enter image description here enter image description here

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете подготовить каждое изображение для «калейдоскопа» отдельно, а затем вставить его на полученное изображение:

from PIL import Image

image = Image.open('image.png')
w, h = image.size
w_new = int(w/2)
h_new = int(h/2)
image.thumbnail((w_new, h_new), Image.ANTIALIAS)

images = [((0, 0), image.copy().rotate(180).transpose(Image.FLIP_LEFT_RIGHT)),
          ((w_new, 0), image.copy().rotate(180)),
          ((0, h_new), image.copy()),
          ((w_new, h_new), image.copy().transpose(Image.FLIP_LEFT_RIGHT))]

result = Image.new('RGB', (w, h))
[result.paste(img[1], img[0]) for img in images]
result.save('result.png')

Вывод:

enter image description here

...