本文将详细分析一款基于 wxPython 和 Pillow (PIL) 的简单图片处理工具,包括核心功能的实现与代码的设计思路。这款工具支持图片选择、旋转、合并、压缩,并且具有友好的图形用户界面(GUI)。
C:\pythoncode\new\imagemergeandexpress.py
全部代码
import wx
from PIL import Image
import os
from io import BytesIO
class ImageProcessorFrame(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='图片处理工具')
self.selected_images = []
self.current_image = None
self.current_pil_image = None # 存储PIL Image对象
self.init_ui()
def init_ui(self):
panel = wx.Panel(self)
main_sizer = wx.BoxSizer(wx.HORIZONTAL)
# 左侧控制面板
left_sizer = wx.BoxSizer(wx.VERTICAL)
# 创建按钮
select_btn = wx.Button(panel, label='选择图片')
rotate_btn = wx.Button(panel, label='旋转')
merge_btn = wx.Button(panel, label='合并')
compress_btn = wx.Button(panel, label='压缩')
# 创建列表框显示选择的图片
self.list_box = wx.ListBox(panel, size=(200, 300))
# 添加组件到左侧sizer
left_sizer.Add(select_btn, 0, wx.ALL | wx.EXPAND, 5)
left_sizer.Add(self.list_box, 1, wx.ALL | wx.EXPAND, 5)
left_sizer.Add(rotate_btn, 0, wx.ALL | wx.EXPAND, 5)
left_sizer.Add(merge_btn, 0, wx.ALL | wx.EXPAND, 5)
left_sizer.Add(compress_btn, 0, wx.ALL | wx.EXPAND, 5)
# 右侧图片显示区域
right_sizer = wx.BoxSizer(wx.VERTICAL)
self.image_display = wx.StaticBitmap(panel, size=(600, 400))
right_sizer.Add(self.image_display, 1, wx.EXPAND | wx.ALL, 5)
# 将左右两侧添加到主sizer
main_sizer.Add(left_sizer, 0, wx.EXPAND | wx.ALL, 5)
main_sizer.Add(right_sizer, 1, wx.EXPAND | wx.ALL, 5)
# 绑定事件
select_btn.Bind(wx.EVT_BUTTON, self.on_select)
rotate_btn.Bind(wx.EVT_BUTTON, self.on_rotate)
merge_btn.Bind(wx.EVT_BUTTON, self.on_merge)
compress_btn.Bind(wx.EVT_BUTTON, self.on_compress)
self.list_box.Bind(wx.EVT_LISTBOX, self.on_select_image)
panel.SetSizer(main_sizer)
self.SetSize((900, 600))
self.Centre()
def update_image_display(self, pil_image):
"""更新图片显示"""
if pil_image:
try:
# 确保图片是RGB模式
if pil_image.mode != 'RGB':
pil_image = pil_image.convert('RGB')
# 获取显示区域的大小
display_size = self.image_display.GetSize()
image_size = pil_image.size
# 计算缩放比例
ratio = min(display_size[0]/image_size[0],
display_size[1]/image_size[1])
new_size = (int(image_size[0] * ratio),
int(image_size[1] * ratio))
# 调整图片大小
resized_image = pil_image.resize(new_size, Image.Res

最低0.47元/天 解锁文章
457

被折叠的 条评论
为什么被折叠?



