当谈到图像查看和管理时,我们往往会使用一些工具软件,比如Windows自带的照片查看器或者第三方工具。那如果你想要一个更加强大和定制化的图像查看器呢?这时候就需要自己动手写一个程序了。
C:\pythoncode\new\ShowSqliteImage.py
这里我们将介绍一个使用Python和wxPython编写的图像查看器应用程序。它不仅可以查看图像,还支持缩放、旋转等基本操作,最酷的是它可以连接SQLite数据库,从中读取图像并计算图像的MD5哈希值,用于查找重复图像。
程序的界面非常简洁,顶部有一个文本框用于选择SQLite数据库文件,中间是一个列表框列出数据库中的所有图像名称。选择一个图像名称后,就会在右侧区域显示该图像。下方有几个按钮,可以对图像进行旋转、放大、缩小和重置等操作。还有一个独特的"Compare MD5"按钮,点击它就会计算当前图像的MD5哈希值,并在数据库中搜索是否有重复的图像。
代码的编写利用了wxPython这个跨平台的GUI库,使用Python的PIL库来处理图像。SQLite则用于存储图像数据和元数据。代码结构清晰,功能实现也很巧妙,是一个不错的wxPython编程实例。
完整代码:
import wx
import sqlite3
import os
import hashlib
from datetime import datetime
import io
from PIL import Image, ImageOps
class ImageViewerApp(wx.Frame):
def __init__(self, parent, title):
super(ImageViewerApp, self).__init__(parent, title=title, size=(1000, 700))
self.panel = wx.Panel(self)
self.db_path = ""
self.original_image = None
self.init_ui()
self.Centre()
self.Show()
def init_ui(self):
vbox = wx.BoxSizer(wx.VERTICAL)
# Database selection
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
self.db_path_text = wx.TextCtrl(self.panel)
db_path_btn = wx.Button(self.panel, label='Select Database')
db_path_btn.Bind(wx.EVT_BUTTON, self.on_select_database)
hbox1.Add(self.db_path_text, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
hbox1.Add(db_path_btn, flag=wx.ALL, border=5)
vbox.Add(hbox1, flag=wx.EXPAND)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
# List of image names
self.image_list = wx.ListBox(self.panel)
self.image_list.Bind(wx.EVT_LISTBOX, self.on_select_image)
hbox2.Add(self.image_list, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
# Image display area and controls
right_panel = wx.Panel(self.panel)
right_sizer = wx.BoxSizer(wx.VERTICAL)
self.image_display = wx.StaticBitmap(right_panel)
right_sizer.Add(self.image_display, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
rotate_btn = wx.Button(right_panel, label=<