吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3368|回复: 49
收起左侧

[Windows] 一个可以分割图片组成pdf的自编小程序

[复制链接]
qingfeng1234 发表于 2024-4-25 17:13
本帖最后由 qingfeng1234 于 2024-4-26 10:39 编辑

有的pdf电子书或者图片,特别是漫画类的经常是一个页面两个画面,而且右边开始阅读,相当于直接扫描了书一样。在手机或者平板电脑不方便观看,为了解决这个问题,写了py一个小程序,可以批量将图片进行从中间分割并将分割后的图片组成pdf电子书。注:这个排序方式是从分割图片的右侧开始排序。



永久分享链接
链接: https://pan.baidu.com/s/141NKjz-lWBFW0cVaq_8BNA?pwd=1234 提取码: 1234
软件使用介绍.jpg

免费评分

参与人数 10吾爱币 +9 热心值 +10 收起 理由
hllpi + 1 + 1 谢谢@Thanks!
Sindo + 1 + 1 我很赞同!
寒焰HY + 1 + 1 我很赞同!
dogox + 1 + 1 我很赞同!
way824325223 + 1 谢谢@Thanks!
不忘形影 + 2 + 1 原来是我的文件不对,要放横长图,我就说竖长图怎么没效果,要支持竖长图或.
太阳の吻 + 1 + 1 谢谢@Thanks!
jinwee + 1 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
iyy + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| qingfeng1234 发表于 2024-4-26 09:21
dazebat 发表于 2024-4-25 21:26
无源码。。。。紫薯布丁

import os
from tkinter import Tk, filedialog, messagebox, Button, Label, StringVar, Frame
from tkinter.ttk import Progressbar
from PIL import Image
import img2pdf
from pathlib import Path

# 初始化Tkinter主窗口
root = Tk()
root.title("Image Splitter and PDF Creator")

# 设置窗口的最小大小
root.minsize(500, 300)

# 设置窗口的背景颜色
root.configure(bg="white")

# 用于存储选择的文件夹路径的变量
selected_folder = StringVar(root)

# 创建并配置进度条
progress_bar = Progressbar(root, orient="horizontal", length=300)
progress_bar.pack(pady=20, padx=60, fill="x")

# 全局变量
selected_path = None
split_image_paths = []

def split_and_sort_images():
    if not selected_folder.get():
        messagebox.showerror("Error", "Please select a folder first.")
        return

    global selected_path
    selected_path = Path(selected_folder.get())
    if not selected_path.is_dir():
        messagebox.showerror("Error", "Selected path does not exist.")
        return

    # 遍历选定文件夹中的所有子文件夹
    for subdir, dirs, files in os.walk(str(selected_path)):
        for folder in dirs:
            folder_path = Path(subdir) / folder
            if folder_path.is_dir():
                process_images_in_folder(folder_path)

    # 处理完成后,显示消息
    messagebox.showinfo("Success", "All images have been processed successfully!")

def process_images_in_folder(folder_path):
    # 创建分割图片的文件夹
    split_folder_name = f"split_images_{folder_path.name}"
    split_folder_path = selected_path / split_folder_name
    split_folder_path.mkdir(exist_ok=True, parents=True)

    # 遍历文件夹中的所有图片文件
    for file in os.listdir(folder_path):
        if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
            process_image(Path(folder_path) / file, split_folder_path)

    # 生成PDF
    pdf_folder_path = selected_path / "pdfs"
    pdf_folder_path.mkdir(exist_ok=True, parents=True)
    pdf_save_path = pdf_folder_path / f"{folder_path.name}.pdf"

    with open(pdf_save_path, "wb") as f:
        f.write(img2pdf.convert(split_image_paths))

    messagebox.showinfo("PDF Created", f"PDF file has been created: {pdf_save_path}")

def process_image(image_path, split_folder_path):
    try:
        with Image.open(image_path) as image:
            width, height = image.size
            if width > 1:
                left_part = image.crop((0, 0, width // 2, height))
                right_part = image.crop((width // 2, 0, width, height))

                left_image_path = split_folder_path / f"{os.path.splitext(image_path.name)[0]}_left.jpg"
                right_image_path = split_folder_path / f"{os.path.splitext(image_path.name)[0]}_right.jpg"

                left_part.save(left_image_path)
                right_part.save(right_image_path)

                # 将分割后图片的路径添加到列表中
                split_image_paths.extend([str(left_image_path), str(right_image_path)])

    except IOError as e:
        messagebox.showerror("Error", f"Error opening image {image_path}: {e}")

def select_folder():
    folder_path = filedialog.askdirectory()
    if folder_path:
        selected_folder.set(folder_path)
        progress_bar['value'] = 0  # 重置进度条
        start_button.config(state="normal")

# 创建选择文件夹的按钮
select_button = Button(root, text="Select Folder", command=select_folder, font=("Helvetica", 12))
select_button.pack(pady=15)

# 创建开始处理按钮
start_button = Button(root, text="Start Processing", command=split_and_sort_images, state="disabled", font=("Helvetica", 12))
start_button.pack(pady=15)

# 进入Tkinter事件循环
root.mainloop()

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
小户呦 + 1 + 1 热心回复!
dazebat + 1 + 1 我很赞同!你这,,,,不给你分我就太过分了

查看全部评分

haishibuxing 发表于 2024-4-25 17:21
头像被屏蔽
heng179 发表于 2024-4-25 17:25
玄觞 发表于 2024-4-25 17:27
好东西,赶紧收藏来康康
hfxkuk 发表于 2024-4-25 17:35
好东西,赶紧收藏来看看
XYZSA168 发表于 2024-4-25 17:44
不错 感谢分享
wtz0027 发表于 2024-4-25 17:48
挺好,收藏
iyy 发表于 2024-4-25 17:49
下载一下 试试
southerlywindly 发表于 2024-4-25 17:52
很有意思,收藏一下,不知道将来什么时间就能用到了,感谢分享
FYL11162022 发表于 2024-4-25 18:01
挺不错的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 19:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表