Typora 清理未引用图片工具

相信有些小伙伴在使用Typora或者其他markdown时,没有使用图床的情况下会被没有引用的图片烦扰。所以做了个简单的工具希望对大家有所帮助。

文末附源码及代码拉取地址


‼️ 前提:您要在Typora进行如下设置:
在这里插入图片描述
确保图片都存储在该文件夹下。

工具介绍

功能

自动清理

📌 自动识别 Markdown 文件中引用的图片。

📌 清理对应的 .assets 文件夹中未被引用的图片。
在这里插入图片描述

安全处理

🔧 将未引用的图片移动到 deleted_images 文件夹,而非直接删除,避免误删。
在这里插入图片描述

可视化操作

📝 提供图形用户界面(GUI),方便用户选择 Markdown 文件。

📝 实时显示操作结果,包括图片总数、删除或移动的图片数量等信息。

依赖库

仅需 Python 标准库,无需额外安装!

(Python 3.7+ 环境已包含所有依赖)

使用说明

1. 界面操作

在这里插入图片描述

2. 操作步骤

步骤操作说明
选择文件点击 “选择 Markdown 文件并清理” 按钮,在弹出的文件选择对话框中选择要处理的 Markdown 文件。
查看结果程序会自动检查对应的 .assets 文件夹,并将未引用的图片移动到 deleted_images 文件夹。操作结果会显示在下方的文本框中。

如图:
在这里插入图片描述

3. 注意事项

⚠️ 文件存在性:确保选择的 Markdown 文件和对应的 .assets 文件夹存在。

⚠️ 文件权限:确保程序有足够的权限访问和移动图片文件。

对应的 .assets 文件夹存在。

⚠️ 文件权限:确保程序有足够的权限访问和移动图片文件。

运行方式

方式 1:运行源码

安装 Python 3.7+ 环境。

下载或复制源码文件 typora_assets_cleaner.py

执行命令:

python typora\_assets\_cleaner.py

方式2:源码或exe

import tkinter as tk
from tkinter import filedialog
import os
import re
import shutil


def find_used_images(md_file):
    used_images = []
    try:
        with open(md_file, 'r', encoding='utf-8') as f:
            content = f.read()
            pattern = r'!\[.*?\]\((.*?)\)'
            matches = re.findall(pattern, content)
            for match in matches:
                image_name = os.path.basename(match)
                used_images.append(image_name)
    except FileNotFoundError:
        result_text.insert(tk.END, f"错误: 文件 {md_file} 未找到。\n")
    return used_images


def clean_assets_folder():
    md_file = filedialog.askopenfilename(filetypes=[("Markdown文件", "*.md")])
    if not md_file:
        return
    assets_folder = os.path.splitext(md_file)[0] + '.assets'
    if not os.path.exists(assets_folder):
        result_text.insert(tk.END, f"错误: {assets_folder} 文件夹不存在。\n")
        return
    used_images = find_used_images(md_file)
    all_images = []
    for root, dirs, files in os.walk(assets_folder):
        for file in files:
            if file.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.svg', '.tiff', '.webp', '.gif')):
                all_images.append(file)
    result_text.insert(tk.END, f".assets 文件夹中的图片总数为{len(all_images)}\n")
    deleted_count = 0
    deleted_folder = os.path.join(assets_folder, 'deleted_images')
    if not os.path.exists(deleted_folder):
        os.makedirs(deleted_folder)
    for file in all_images:
        if file not in used_images:
            file_path = os.path.join(assets_folder, file)
            # 检查文件是否存在
            if os.path.exists(file_path):
                try:
                    shutil.move(file_path, os.path.join(deleted_folder, file))
                    result_text.insert(tk.END, f"图片已移动到 {deleted_folder}: {file}\n")
                    deleted_count += 1
                except Exception as e:
                    result_text.insert(tk.END, f"移动 {file} 时出错: {e}\n")
            else:
                result_text.insert(tk.END, f"文件 {file} 已不存在,跳过移动操作。\n")
    result_text.insert(tk.END, f"删除或移动到deleted_images文件夹的图片数量为 {deleted_count}\n")


root = tk.Tk()
root.title("Typora清理未引用图片")
root.geometry("790x500")
root.configure(bg="#ecf0f1")

button = tk.Button(root, text="选择Markdown文件并清理", command=clean_assets_folder,
                   font=("微软雅黑", 14), bg="#007BFF", fg="white", padx=20, pady=10)
button.pack(pady=20)

result_text = tk.Text(root, height=18, width=90, font=("微软雅黑", 10))
result_text.pack(pady=20)

root.mainloop()

exe文件可在github下载:https://github.com/qiapicoco/typora-assets-image-cleaner#

代码拉取:

git@github.com:qiapicoco/typora-assets-image-cleaner.git

https://github.com/qiapicoco/typora-assets-image-cleaner.git

希望这个工具能帮到您!✨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值