python实现压缩包图片预览与收藏功能

 更新时间:2025年09月13日 11:44:47   作者:winfredzhang  
在日常处理图片资料时,我们经常会遇到大量打包在压缩文件中的照片,逐个解压再查看不仅麻烦,而且浪费时间,下面我们来看看如何使用Python实现压缩包图片预览与收藏功能吧

在日常处理图片资料时,我们经常会遇到大量打包在压缩文件中的照片。逐个解压再查看不仅麻烦,而且浪费时间。如果能在一个小工具里直接浏览压缩包中的照片,并支持将常用的压缩文件收藏起来,岂不是非常高效?

本文将介绍一个基于 wxPython 的小工具,它可以:

  • 遍历文件夹中的压缩文件(zip/rar/tar 等)
  • 选择压缩文件后自动解压缩并预览其中的图片
  • 收藏常用的压缩文件路径,点击收藏即可快速加载其内容

功能设计

整个界面分为 左右两部分

左侧列表区

  • archive_listbox:压缩文件列表
  • current_photo_listbox:当前压缩文件中的照片列表
  • favorite_listbox:收藏的压缩文件列表

右侧预览区

预览选中的照片,支持缩放显示

交互逻辑:

  • 选择一个压缩文件 → 自动解压缩到临时目录 → 显示所有图片
  • 点击 收藏 按钮 → 将选中的压缩文件路径加入收藏
  • 点击收藏列表中的项 → 自动解压并预览其中所有图片

关键实现

1. 压缩文件解压与图片筛选

解压功能统一由 extract_archive 处理,支持 zip/rar/tar 三种常见格式。

解压后会筛选出 .jpg/.png/.gif 等图片文件,显示在 current_photo_listbox 中。

def extract_archive(self, archive_path):
    """解压缩文件并列出其中的照片"""
    # 解压目录
    extract_dir = os.path.join(self.temp_dir, os.path.basename(archive_path))
    if os.path.exists(extract_dir):
        shutil.rmtree(extract_dir)
    os.makedirs(extract_dir)

    # 根据格式解压
    if archive_path.endswith(".zip"):
        with zipfile.ZipFile(archive_path, 'r') as zip_ref:
            zip_ref.extractall(extract_dir)
    elif archive_path.endswith(".rar"):
        with rarfile.RarFile(archive_path, 'r') as rar_ref:
            rar_ref.extractall(extract_dir)
    elif archive_path.endswith(".tar") or archive_path.endswith(".gz"):
        with tarfile.open(archive_path, 'r:*') as tar_ref:
            tar_ref.extractall(extract_dir)
    else:
        wx.CallAfter(self.status_text.SetLabel, "不支持的压缩格式")
        return

    # 列出照片
    photos = []
    for root, _, files in os.walk(extract_dir):
        for file in files:
            if file.lower().endswith((".png", ".jpg", ".jpeg", ".bmp", ".gif")):
                photos.append(os.path.join(root, file))

    wx.CallAfter(self.update_photo_list, photos)

2. 收藏功能

收藏按钮的逻辑是:获取当前 archive_listbox 选中的压缩文件路径,存储到 favorite_listbox 中。

def on_favorite(self, event):
    """收藏按钮事件"""
    selection = self.archive_listbox.GetSelection()
    if selection == wx.NOT_FOUND:
        wx.MessageBox("请先选择一个压缩文件", "提示", wx.OK | wx.ICON_INFORMATION)
        return

    archive_path = self.archive_listbox.GetClientData(selection)

    # 避免重复收藏
    for i in range(self.favorite_listbox.GetCount()):
        if self.favorite_listbox.GetClientData(i) == archive_path:
            wx.MessageBox("该压缩文件已经在收藏列表中", "提示", wx.OK | wx.ICON_INFORMATION)
            return

    display_text = os.path.basename(archive_path)
    self.favorite_listbox.Append(display_text, archive_path)
    self.status_text.SetLabel(f"已收藏: {display_text}")

3. 点击收藏项加载图片

收藏列表保存的是 压缩文件路径,当用户点击某个收藏项时,直接调用 extract_archive 来解压和加载照片。

def on_favorite_select(self, event):
    """收藏列表选择事件"""
    selection = self.favorite_listbox.GetSelection()
    if selection == wx.NOT_FOUND:
        return

    archive_path = self.favorite_listbox.GetClientData(selection)
    if not os.path.exists(archive_path):
        self.status_text.SetLabel(f"文件不存在: {archive_path}")
        wx.MessageBox(f"文件不存在: {archive_path}", "错误", wx.OK | wx.ICON_ERROR)
        return

    self.status_text.SetLabel(f"正在解压收藏文件: {os.path.basename(archive_path)}...")

    thread = threading.Thread(target=self.extract_archive, args=(archive_path,))
    thread.daemon = True
    thread.start()

这样用户只需点击收藏,就能快速打开常用的压缩包,无需再去文件夹里查找。

4. 图片预览

current_photo_listbox 选择某个图片时,右侧的 preview_panel 会用 wxPython 的 wx.StaticBitmap 显示缩略图:

def show_image(self, image_path):
    """显示图片"""
    image = wx.Image(image_path, wx.BITMAP_TYPE_ANY)
    W, H = self.preview_panel.GetClientSize()
    image = image.Scale(W, H, wx.IMAGE_QUALITY_HIGH)
    self.preview_bitmap.SetBitmap(wx.Bitmap(image))
    self.preview_panel.Refresh()

运行效果

  • 左侧加载文件夹,自动扫描压缩文件
  • 点击某个压缩文件 → 解压缩并显示照片
  • 点击 收藏 → 压缩文件加入收藏列表
  • 点击收藏项 → 自动解压并显示照片

整个操作流程非常直观,特别适合整理和浏览打包好的图片资源。

运行结果

到此这篇关于python实现压缩包图片预览与收藏功能的文章就介绍到这了,更多相关python图片预览内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Matplotlib实现各种条形图绘制

    Matplotlib实现各种条形图绘制

    这篇文章主要介绍了Matplotlib实现各种条形图绘制,文章通过利用 plt.bar 方法实现各种条形图绘制,内容详细具有一定的参考价值,需要的小伙伴可以参考一下
    2022-03-03
  • 详解python路径拼接os.path.join()函数的用法

    详解python路径拼接os.path.join()函数的用法

    os.path.join()函数:连接两个或更多的路径名组件。这篇文章主要介绍了python路径拼接os.path.join()函数的用法,需要的朋友可以参考下
    2019-10-10
  • Python文件的操作示例的详细讲解

    Python文件的操作示例的详细讲解

    本问重点讲解了Python文件的读写原理、常用文件打开模式、文件对象的常用方法和目录的相关操作详细讲解,对Python文件操作相关知识感兴趣的朋友跟随小编一起看看吧
    2021-04-04
  • Python计算回文数的方法

    Python计算回文数的方法

    这篇文章主要介绍了Python计算回文数的方法,实例分析了Python操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python 操作 ElasticSearch的完整代码

    Python 操作 ElasticSearch的完整代码

    python提供了操作ElasticSearch 接口,因此要用python来操作ElasticSearch,这篇文章主要介绍了Python 操作 ElasticSearch,需要的朋友可以参考下
    2019-08-08
  • python中实现php的var_dump函数功能

    python中实现php的var_dump函数功能

    这篇文章主要介绍了python中实现php的var_dump函数功能,var_dump函数在PHP中调试时非常实用,本文介绍在Python中实现这个函数,需要的朋友可以参考下
    2015-01-01
  • 脚本测试postman快速导出python接口测试过程示例

    脚本测试postman快速导出python接口测试过程示例

    这篇文章主要介绍了关于脚本测试postman快速导出python接口测试示例的过程操作,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • Python中修改字符串的四种方法

    Python中修改字符串的四种方法

    在Python中,字符串是不可变类型,即无法直接修改字符串的某一位字符。这篇文章主要介绍了Python中修改字符串的四种方法,需要的朋友可以参考下
    2018-11-11
  • 深度解析Python中递归下降解析器的原理与实现

    深度解析Python中递归下降解析器的原理与实现

    在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-08-08
  • python人人网登录应用实例

    python人人网登录应用实例

    这篇文章主要介绍了python人人网登录应用实例,是一个非常实用的技巧,需要的朋友可以参考下
    2014-09-09

最新评论