Python使用Pillow创建可自定义的图标生成器!
Python使用Pillow创建可自定义的图标生成器!
在本篇博客中,我们将探讨如何使用 wxPython 和 Pillow 库创建一个简单的图标生成器。用户可以通过该工具选择目标文件夹,并生成三种不同尺寸(16x16、48x48、128x128)的PNG格式图标文件。图标将采用“截图框”的主题,通过图形化方式展示如何快速生成自定义图标。
C:\pythoncode\new\createicon3size.py
全部代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
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 中处理图像的库,用于绘制和保存图标。
首先,确保你的环境中已经安装了这两个库。可以通过以下命令安装:
1
|
pip install wxPython Pillow |
设计思路
我们的图标将有一个简单的设计,包含:
一个框架,模拟截图工具的选择区域。
两条交叉的线,模拟截图区域的边界。
图标将以三种不同的尺寸生成:16x16、48x48 和 128x128,以确保适配不同的应用场景,如应用程序图标、任务栏图标等。
步骤 1:创建 wxPython 窗口
我们首先创建一个简单的 wxPython 窗口,包含:
一个文件夹选择控件,让用户选择图标保存的目标文件夹。
一个按钮,当点击按钮时生成图标。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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 格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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 格式图标。这种工具对于需要生成不同尺寸图标的开发者非常有用,尤其是在需要图标适配多种设备和分辨率时。
以上就是python使用Pillow创建可自定义的图标生成器的详细内容。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
共有 0 条评论