Как создавать коллажи с помощью Python

Коллажи — отличный способ сохранить воспоминания в группе связанных фотографий. Однако онлайн-приложения для создания фотоколлажей часто несут потенциальную угрозу безопасности, в то время как офлайн-приложения стоят денег и не имеют необходимых вам функций.

Как создавать коллажи с помощью Python. Изображение 1.

Создав свой собственный инструмент для создания фотоколлажей, вам не придется беспокоиться об этих вещах. Вот как создать приложение для фотоколлажей с помощью Python.

Модули Tkinter и PIL

Для создания приложения для создания фотоколлажей вам понадобятся модули Tkinter и PIL. Tkinter позволяет создавать настольные приложения. Он предоставляет ряд виджетов, которые упрощают разработку графического интерфейса.

Библиотека Pillow — ветвь библиотеки изображений Python (PIL) — предоставляет функции обработки изображений, помогая редактировать, создавать, конвертировать форматы файлов и сохранять изображения.

Чтобы установить Tkinter и Pillow, откройте терминал и запустите:

пип установить тк подушку

Настройте графический интерфейс и редактируйте фотографии.

Начните с импорта необходимых модулей. Создайте класс ImageCollageApp и задайте ему имя и размер окна. Определите холст с помощью tk.Canvas(), затем установите родительский элемент, ширину, высоту и цвет фона.

импортировать tkinter как tk из tkinter import filedialog, simpledialog, messagebox из PIL import Image, класс ImageTk ImageCollageApp: def __init__(self, root): self.root = root self.root.title(“Image Collage Maker”) self.images = () self.image_refs = () self.collage_size = (600, 500) self.collage_canvas = tk.Canvas( self.root, width=self.collage_size(0), height=self.collage_size(1), bg=” белый”, ) self.collage_canvas.pack()

Создайте две кнопки: «Добавить изображение» и «Создать коллаж». Укажите родительский элемент, отображаемый контент, команду для запуска и стиль шрифта. Расположите кнопки, добавив соответствующие отступы. Инициализируйте функцию drag_data для хранения информации об операции перетаскивания.

Инициализируйте image_positions, чтобы сохранить положение изображения на холсте. Определите 3 обработчика событий, которые будут реагировать на выбор изображения, перетаскивание.

self.btn_add_image = tk.Button( self.root, text=”Добавить изображение”, команда=self.add_images, шрифт=(“Arial”, 12, “жирный”), ) self.btn_add_image.pack(pady=10) self.btn_create_collage = tk.Button( self.root, text=”Создать коллаж”, команда=self.create_collage, font=(“Arial”, 12, “bold”), ) self.btn_create_collage.pack(pady=5) self.drag_data = {“x”: 0, “y”: 0, “item”: нет} self.image_positions = () self.collage_canvas.bind(“”, self.on_press) self.collage_canvas.bind(“” , self.on_drag) self.collage_canvas.bind(“”, self.on_release)

Определите метод on_press. Получите самый последний элемент холста из места щелчка мыши пользователя и сохраните его под ключом элемента словаря drag_data. Сохраняет координаты x и y щелчка мыши. Вы будете использовать его, чтобы вычислить, насколько далеко пользователь перемещает мышь во время перетаскивания.

def on_press(self, event): self.drag_data(“item”) = self.collage_canvas.find_closest(event.x, event.y)(0) self.drag_data(“x”) = event.x self.drag_data( “у”) = событие.у

Определите метод on_drag. Рассчитайте расстояние по горизонтали и вертикали, на котором пользователь зависал при перетаскивании, и соответствующим образом обновите положение изображения. Сохраните обновленные координаты изображения, используя клавиши x и y словаря drag_data.

def on_drag(self, event): delta_x = event.x – self.drag_data(“x”) delta_y = event.y – self.drag_data(“y”) self.collage_canvas.move(self.drag_data(“item”) , delta_x, delta_y) self.drag_data(“x”) = event.x self.drag_data(“y”) = event.y

Определите метод on_release. Удаляет ссылку на изображение, которое перетаскивает пользователь, вместе с его координатами. Вызовите update_image_positions, чтобы обновить положение каждого изображения на холсте после того, как пользователь перетаскивает его.

def on_release(self, event): self.drag_data(“item”) = Нет self.drag_data(“x”) = 0 self.drag_data(“y”) = 0 self.update_image_positions()

Определите метод update_image_positions. Очистите список image_positions и просмотрите его по всем элементам холста. Для каждого элемента найдите координаты и добавьте их в список.

def update_image_positions(self): self.image_positions.clear() для элемента в self.collage_canvas.find_all(): x, y = self.collage_canvas.coords(item) self.image_positions.append((x, y))

Определите метод add_images . Создайте диалоговое окно, предлагающее пользователю ввести количество фотографий, которые вы хотите объединить. Если пользователь указал действительный номер, открывается диалоговое окно файла, позволяющее пользователю выбирать только файлы изображений. После того, как пользователь выбрал одно или несколько изображений, откройте каждое изображение с помощью метода Pillow Image.open().

Вызовите resize_image и создайте PhotoImage, совместимый с Tkinter. Добавьте его в список image_refs и вызовите update_canvas.

def add_images(self): num_images = simpledialog.askinteger( “Количество изображений”, “Введите количество изображений:”), если num_images не равно None: file_paths = filedialog.askopenfilenames( filetypes=((“Файлы изображений”, “* .png;*.jpg;*.jpeg;*.gif”)) ), if file_paths: for i in range(min(num_images, len(file_paths))): file_path = file_paths(i) image = Image.open(file_path) ) resized_image = self.resize_image(image) self.images.append(resized_image) self.image_refs.append(ImageTk.PhotoImage(resized_image)) self.update_canvas()

Определите метод resize_image. Получите ширину и высоту изображения и рассчитайте его соотношение сторон. Если их больше одного, установите новую ширину, равную половине ширины коллажа. Рассчитайте соответствующую новую высоту, сохраняя соотношение сторон.

Если соотношение сторон меньше 1, установите новую высоту, равную половине составного изображения. Аналогично рассчитайте соответствующую ширину. Используйте метод изменения размера Pillow, чтобы вернуть изображение, размер которого был изменен с использованием рассчитанных параметров.

def resize_image(self, image): img_width, img_height = image.size аспект_пропорции = img_width / img_height, если аспект_пропорции > 1: new_width = self.collage_size(0) // 2 new_height = int(new_width / аспект_пропорции) иначе: new_height = self. collage_size(1) // 2 new_width = int(new_height * age_ratio) return image.resize((new_width, new_height))

Определите метод update_canvas. Удалите весь элемент и запросите у пользователя желаемое количество строк и столбцов через диалоговое окно файла. Установите ширину и высоту на 1/2 указанного размера коллажа. Очистите список мест для фотографий. Установите смещения x и y на 0, чтобы вы могли постоянно отслеживать смещения положения и располагать изображения в строках и столбцах.

def update_canvas(self): self.collage_canvas.delete(“all”) rows = simpledialog.askinteger(“Количество строк”, “Введите количество строк:”) cols = simpledialog.askinteger( “Количество столбцов”, ” Введите количество столбцов:” ) collage_width = self.collage_size(0) * cols // 2 collage_height = self.collage_size(1) * rows // 2 self.collage_canvas.config(width=collage_width, height=collage_height) self. image_positions.clear() x_offset, y_offset = 0, 0

Переберите список image_refs и создайте изображение на холсте с определенным смещением. Установите привязку на северо-запад, чтобы расположить верхний левый угол в определенных координатах. Добавьте координаты в список image_positions.

Обновите x_offset, чтобы добавить половину ширины составного изображения для подготовки к размещению следующего изображения. Если количество изображений, помещенных в текущую строку, кратно указанному номеру столбца, установите x_offset равным 0. Это указывает на начальную точку новой строки. Добавьте половину высоты коллажа, чтобы установить координату y для следующей строки.

для i, image_ref в перечислении (self.image_refs): self.collage_canvas.create_image( x_offset, y_offset,nchor=tk.NW, image=image_ref ) self.image_positions.append((x_offset, y_offset)) x_offset += self.collage_size (0) // 2 if (i + 1) % cols == 0: x_offset = 0 y_offset += self.collage_size(1) // 2

Создайте коллаж и сохраните его

Определите метод create_collage. Если в коллаже нет фотографий, появится предупреждение. Соберите ширину и высоту коллажа. Создайте подушку-изображение на белом фоне. Прокрутите список изображений и вставьте каждое изображение в фон в указанном месте.

Сохраните коллаж и отобразите его с помощью средства просмотра изображений по умолчанию.

def create_collage(self): if len(self.images) == 0: messagebox.showwarning(“Внимание”, “Сначала добавьте изображения!”) return collage_width = self.collage_canvas.winfo_width() collage_height = self.collage_canvas.winfo_height () фон = Image.new(“RGB”, (collage_width, collage_height), “white”) для idx, изображение в перечислении(self.images): x_offset, y_offset = self.image_positions(idx) x_offset, y_offset = int( x_offset), int(y_offset) пасты_box = ( x_offset, y_offset, x_offset + image.width, y_offset + image.height, ) background.paste(image, Paste_box) background.save(“collage_with_white_background.jpg”) background.show()

Создайте экземпляр Tkinter и класс ImageCollageApp. Функция mainloop() сообщает Python о необходимости зацикливать события Tkinter и прослушивать события, пока вы не закроете окно.

if __name__ == “__main__”: root = tk.Tk() app = ImageCollageApp(root) root.mainloop()

Протестируйте различные функции приложения для коллажей

При запуске этой программы появится окно с двумя кнопками «Добавить изображение» и «Создать коллаж». При нажатии кнопки «Добавить изображение» появится диалоговое окно с запросом количества изображений для объединения. Когда вы введете количество фотографий (5) и выберете их, появится другое диалоговое окно. Он запрашивает номер строки, за которым следует номер столбца.

Как создавать коллажи с помощью Python. Изображение 2.

При вводе двух строк и трех столбцов это окно упорядочивает изображения в виде сетки.

Как создавать коллажи с помощью Python. Изображение 3.

Окно предварительного просмотра позволяет перетаскивать изображения по желанию. Когда вы нажмете кнопку «Создать коллаж» , эта программа сохранит изображение.

Просматривая это изображение, вы можете подтвердить, что программа успешно объединила изображение.

Как создавать коллажи с помощью Python. Изображение 4.

Выше описано, как создать приложение для создания фотоколлажей с помощью Python. Надеюсь, статья окажется для вас полезной.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *