在本篇博客中,我们将探讨如何使用 wxPython 和 Pillow 库创建一个简单的图标生成器。用户可以通过该工具选择目标文件夹,并生成三种不同尺寸(16x16、48x48、128x128)的PNG格式图标文件。图标将采用"截图框"的主题,通过图形化方式展示如何快速生成自定义图标。
C:\pythoncode\new\createicon3size.py
全部代码
python
import wx
from PIL import Image, ImageDraw
import os
class IconGenerator(wx.Frame):
def __init__(self, parent, title):
super().__init__(parent, title=title, size=(600, 400))
# 创建面板
panel = wx.Panel(self)
# 创建控件
self.folder_picker = wx.DirPickerCtrl(panel, path="", size=(500, -1), pos=(50, 50))
self.generate_button = wx.Button(panel, label="生成图标", pos=(50, 150))
# 绑定事件
self.generate_button.Bind(wx.EVT_BUTTON, self.on_generate)
self.Show()
def on_generate(self, event):
# 获取目标文件夹路径
target_folder = self.folder_picker.GetPath()
if not target_folder:
wx.MessageBox("请选择目标文件夹", "错误", wx.ICON_ERROR)
return
# 生成图标并保存为 PNG 文件
self.generate_icons(target_folder)
def generate_icons(self, target_folder):
sizes = [16, 48, 128]
for size in sizes:
file_path = os.path.join(target_folder, f"icon{size}.png")
self.create_icon(size, file_path)
wx.MessageBox("图标已成功生成", "成功", wx.ICON_INFORMATION)
def create_icon(self, size, file_path):
# 创建空白图像,背景色为白色
img = Image.new('RGBA', (size, size), (255, 255, 255, 0))
draw = ImageDraw.Draw(img)
# 在图标上绘制一个简单的框架,模拟截图效果
border_thickness = size // 10 # 边框厚度与图标大小成比例
# 绘制外框
draw.rectangle([border_thickness, border_thickness, size-border_thickness, size-border_thickness], outline="black", width=border_thickness)
# 绘制截取区域的对角线(模拟截图效果)
line_offset = size // 4
draw.line([line_offset, line_offset, size-line_offset, size-line_offset], fill="black", width=2)
draw.line([line_offset, size-line_offset, size-line_offset, line_offset], fill="black", width=2)
# 保存为 PNG 文件
img.save(file_path, format="PNG")
print(f"图标 {file_path} 已生成!")
if __name__ == "__main__":
app = wx.App(False)
IconGenerator(None, title="图标生成器")
app.MainLoop()
项目目标
我们希望创建一个桌面应用程序,用户能够:
- 选择目标文件夹。
- 生成不同尺寸的图标(16x16、48x48、128x128)。
- 以 PNG 格式保存图标,命名为
icon16.png
、icon48.png
和icon128.png
。 - 使用简单的框架和对角线来模拟截图框的效果,作为图标的主题。
所需的库
为了实现这个功能,我们将使用以下 Python 库:
- wxPython:这是一个跨平台的 GUI 库,用于创建图形用户界面(GUI)。
- Pillow:这是 Python 中处理图像的库,用于绘制和保存图标。
首先,确保你的环境中已经安装了这两个库。可以通过以下命令安装:
bash
pip install wxPython Pillow
设计思路
我们的图标将有一个简单的设计,包含:
- 一个框架,模拟截图工具的选择区域。
- 两条交叉的线,模拟截图区域的边界。
图标将以三种不同的尺寸生成:16x16、48x48 和 128x128,以确保适配不同的应用场景,如应用程序图标、任务栏图标等。
步骤 1:创建 wxPython 窗口
我们首先创建一个简单的 wxPython 窗口,包含:
- 一个文件夹选择控件,让用户选择图标保存的目标文件夹。
- 一个按钮,当点击按钮时生成图标。
python
import wx
from PIL import Image, ImageDraw
import os
class IconGenerator(wx.Frame):
def __init__(self, parent, title):
super().__init__(parent, title=title, size=(600, 400))
# 创建面板
panel = wx.Panel(self)
# 创建控件
self.folder_picker = wx.DirPickerCtrl(panel, path="", size=(500, -1), pos=(50, 50))
self.generate_button = wx.Button(panel, label="生成图标", pos=(50, 150))
# 绑定事件
self.generate_button.Bind(wx.EVT_BUTTON, self.on_generate)
self.Show()
def on_generate(self, event):
# 获取目标文件夹路径
target_folder = self.folder_picker.GetPath()
if not target_folder:
wx.MessageBox("请选择目标文件夹", "错误", wx.ICON_ERROR)
return
# 生成图标并保存为 PNG 文件
self.generate_icons(target_folder)
def generate_icons(self, target_folder):
sizes = [16, 48, 128]
for size in sizes:
file_path = os.path.join(target_folder, f"icon{size}.png")
self.create_icon(size, file_path)
wx.MessageBox("图标已成功生成", "成功", wx.ICON_INFORMATION)
def create_icon(self, size, file_path):
# 创建空白图像,背景色为白色
img = Image.new('RGBA', (size, size), (255, 255, 255, 0))
draw = ImageDraw.Draw(img)
# 在图标上绘制一个简单的框架,模拟截图效果
border_thickness = size // 10 # 边框厚度与图标大小成比例
# 绘制外框
draw.rectangle([border_thickness, border_thickness, size-border_thickness, size-border_thickness], outline="black", width=border_thickness)
# 绘制截取区域的对角线(模拟截图效果)
line_offset = size // 4
draw.line([line_offset, line_offset, size-line_offset, size-line_offset], fill="black", width=2)
draw.line([line_offset, size-line_offset, size-line_offset, line_offset], fill="black", width=2)
# 保存为 PNG 文件
img.save(file_path, format="PNG")
print(f"图标 {file_path} 已生成!")
步骤 2:创建图标并保存为 PNG
图标的生成过程通过 Pillow
库完成。我们将创建一个空白的图像,并通过 ImageDraw
类绘制框架和交叉线,模拟截图区域。每个图标会根据不同的尺寸保存为 PNG 格式。
python
def create_icon(self, size, file_path):
# 创建空白图像,背景色为白色
img = Image.new('RGBA', (size, size), (255, 255, 255, 0))
draw = ImageDraw.Draw(img)
# 绘制外框
border_thickness = size // 10
draw.rectangle([border_thickness, border_thickness, size-border_thickness, size-border_thickness], outline="black", width=border_thickness)
# 绘制对角线,模拟截图效果
line_offset = size // 4
draw.line([line_offset, line_offset, size-line_offset, size-line_offset], fill="black", width=2)
draw.line([line_offset, size-line_offset, size-line_offset, line_offset], fill="black", width=2)
# 保存为 PNG 文件
img.save(file_path, format="PNG")
print(f"图标 {file_path} 已生成!")
步骤 3:保存图标并显示消息
每个图标将以 PNG 格式保存到用户选择的目标文件夹。完成后,程序会弹出一个消息框,提示用户图标已成功生成。
步骤 4:运行程序
将以上代码保存为一个 Python 文件,并运行程序。你将看到一个简单的窗口,用户可以选择目标文件夹并点击"生成图标"按钮。当点击按钮后,程序将根据选择的文件夹生成三个不同尺寸的图标文件(icon16.png
、icon48.png
、icon128.png
)。
结果与展示
假设你选择的目标文件夹路径是 C:/Users/YourUsername/Desktop/icons
,运行程序后,生成的图标文件将保存在该目录下:
icon16.png
:16x16 像素icon48.png
:48x48 像素icon128.png
:128x128 像素
这些图标将用于各种应用场景,如在应用程序中作为程序图标,或者作为系统托盘图标等。
运行结果
总结
本项目展示了如何结合 wxPython 和 Pillow 创建一个简单的图标生成器。用户可以通过 GUI 选择目标文件夹,并生成不同尺寸的 PNG 格式图标。这种工具对于需要生成不同尺寸图标的开发者非常有用,尤其是在需要图标适配多种设备和分辨率时。
。