引言
在图像处理领域,经常需要将一张大图切分成多个小图片。本文将介绍如何使用Python开发一个带图形界面的图片分割工具,并重点讨论如何处理实际应用中可能遇到的各种问题。这个工具允许用户选择图片、设置分割的行数和列数,并将分割后的图片保存到指定目录。
C:\pythoncode\new\ImageSplitter.py
全部代码
import wx
import os
import sys
import logging
from PIL import Image
from datetime import datetime
# 配置日志
logging.basicConfig(
filename=f'image_splitter_{
datetime.now().strftime("%Y%m%d_%H%M%S")}.log',
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
class ImageSplitterFrame(wx.Frame):
def __init__(self):
try:
super().__init__(parent=None, title='图片分割工具', size=(500, 400))
self.image_path = None
self.save_dir = None
self.InitUI()
logging.info('程序启动成功')
except Exception as e:
logging.error(f'初始化失败: {
str(e)}')
wx.MessageBox(f'程序初始化失败: {
str(e)}', '错误', wx.OK | wx.ICON_ERROR)
self.Destroy()
def InitUI(self):
try:
# 创建面板
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
# 选择图片按钮
select_btn = wx.Button(panel, label='选择图片')
select_btn.Bind(wx.EVT_BUTTON, self.OnSelect)
vbox.Add(select_btn, 0, wx.ALL|wx.CENTER, 5)
# 显示选中的图片路径
self.path_text = wx.TextCtrl(panel, style=wx.TE_READONLY)
vbox.Add(self.path_text, 0, wx.ALL|wx.EXPAND, 5)
# 行数和列数输入
grid = wx.FlexGridSizer(2, 2, 5, 5)
row_label = wx.StaticText(panel, label='行数:')
self.row_input = wx.SpinCtrl(panel, value='2', min=1, max=100)
col_label = wx.StaticText(panel, label='列数:')
self.col_input = wx.SpinCtrl(panel, value='2', min=1, max=100)
grid.AddMany([
(row_label, 0, wx.ALIGN_CENTER_VERTICAL),
(self.row_input, 0, wx