用豆包生成图片分割工具-Python语言

需求:同事发来一个图片,图片高度达26873像素,需要印刷出来给学生做练习。

图片是从PDF格式文件导出来的,每个页面都是A4大小。所以按图片高度平均分割即可。

如果手动分割特别麻烦。求助豆包。

提问:使用python语言生成一个图片分割工具。要求按图片高度平均分割,可以手动输入要分割的图片个数。

回答:以下是一个使用 Python 语言实现的图片分割工具,它可以按图片高度平均分割图片,并且允许用户手动输入要分割的图片个数。这里我们使用Pillow库来处理图片。

from PIL import Image

def split_image(image_path, num_parts):
    # 打开图片
    image = Image.open(image_path)
    width, height = image.size

    # 计算每个分割部分的高度
    part_height = height // num_parts

    # 分割图片
    for i in range(num_parts):
        # 计算当前分割部分的起始和结束高度
        top = i * part_height
        bottom = (i + 1) * part_height if i < num_parts - 1 else height

        # 裁剪图片
        cropped_image = image.crop((0, top, width, bottom))

        # 保存分割后的图片
        output_path = f"part_{i + 1}.png"
        cropped_image.save(output_path)
        print(f"分割后的图片 {output_path} 已保存。")

if __name__ == "__main__":
    # 获取用户输入的图片路径
    image_path = input("请输入要分割的图片的路径: ")
    try:
        # 获取用户输入的分割图片个数
        num_parts = int(input("请输入要分割的图片个数: "))
        if num_parts <= 0:
            print("分割个数必须是正整数。")
        else:
            split_image(image_path, num_parts)
    except ValueError:
        print("输入无效,请输入一个有效的整数。")

运行如下图:

程序默认为命令行界面,升级为图形界面。

提问:升级程序:升级为图形界面,有打开图片按钮、选择保存路径按钮,能显示分割后的图片文件名列表。

回答:以下是一个使用 Python 的tkinter库创建图形用户界面(GUI)的图片分割工具,它包含打开图片按钮、选择保存路径按钮,并且能显示分割后的图片文件名列表。

import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image

class ImageSplitterGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("图片分割工具")

        # 初始化变量
        self.image_path = ""
        self.save_path = ""

        # 创建控件
        self.open_button = tk.Button(root, text="打开图片", command=self.open_image)
        self.open_button.pack(pady=10)

        self.save_path_button = tk.Button(root, text="选择保存路径", command=self.select_save_path)
        self.save_path_button.pack(pady=10)

        self.num_parts_label = tk.Label(root, text="输入要分割的图片个数:")
        self.num_parts_label.pack(pady=5)

        self.num_parts_entry = tk.Entry(root)
        self.num_parts_entry.pack(pady=5)

        self.split_button = tk.Button(root, text="分割图片", command=self.split_image)
        self.split_button.pack(pady=20)

        self.file_listbox = tk.Listbox(root, width=50)
        self.file_listbox.pack(pady=10)

    def open_image(self):
        self.image_path = filedialog.askopenfilename(filetypes=[("图片文件", "*.png;*.jpg;*.jpeg")])
        if self.image_path:
            messagebox.showinfo("提示", f"已选择图片: {self.image_path}")

    def select_save_path(self):
        self.save_path = filedialog.askdirectory()
        if self.save_path:
            messagebox.showinfo("提示", f"已选择保存路径: {self.save_path}")

    def split_image(self):
        if not self.image_path:
            messagebox.showerror("错误", "请先选择要分割的图片。")
            return
        if not self.save_path:
            messagebox.showerror("错误", "请先选择保存路径。")
            return

        try:
            num_parts = int(self.num_parts_entry.get())
            if num_parts <= 0:
                messagebox.showerror("错误", "分割个数必须是正整数。")
                return
        except ValueError:
            messagebox.showerror("错误", "输入无效,请输入一个有效的整数。")
            return

        try:
            # 打开图片
            image = Image.open(self.image_path)
            width, height = image.size

            # 计算每个分割部分的高度
            part_height = height // num_parts

            # 清空列表框
            self.file_listbox.delete(0, tk.END)

            # 分割图片
            for i in range(num_parts):
                # 计算当前分割部分的起始和结束高度
                top = i * part_height
                bottom = (i + 1) * part_height if i < num_parts - 1 else height

                # 裁剪图片
                cropped_image = image.crop((0, top, width, bottom))

                # 保存分割后的图片
                output_name = f"part_{i + 1}.png"
                output_path = f"{self.save_path}/{output_name}"
                cropped_image.save(output_path)

                # 将文件名添加到列表框中
                self.file_listbox.insert(tk.END, output_name)

            messagebox.showinfo("提示", "图片分割完成。")
        except Exception as e:
            messagebox.showerror("错误", f"分割图片时出现错误: {str(e)}")

if __name__ == "__main__":
    root = tk.Tk()
    app = ImageSplitterGUI(root)
    root.mainloop()

程序运行如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值