python使用Pillow創(chuàng)建可自定義的圖標生成器
在本篇博客中,我們將探討如何使用 wxPython 和 Pillow 庫創(chuàng)建一個簡單的圖標生成器。用戶可以通過該工具選擇目標文件夾,并生成三種不同尺寸(16x16、48x48、128x128)的PNG格式圖標文件。圖標將采用“截圖框”的主題,通過圖形化方式展示如何快速生成自定義圖標。
C:\pythoncode\new\createicon3size.py
全部代碼
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))
# 創(chuàng)建面板
panel = wx.Panel(self)
# 創(chuàng)建控件
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):
# 創(chuàng)建空白圖像,背景色為白色
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)
# 繪制截取區(qū)域的對角線(模擬截圖效果)
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()項目目標
我們希望創(chuàng)建一個桌面應用程序,用戶能夠:
選擇目標文件夾。
生成不同尺寸的圖標(16x16、48x48、128x128)。
以 PNG 格式保存圖標,命名為 icon16.png、icon48.png 和 icon128.png。
使用簡單的框架和對角線來模擬截圖框的效果,作為圖標的主題。
所需的庫
為了實現(xiàn)這個功能,我們將使用以下 Python 庫:
wxPython:這是一個跨平臺的 GUI 庫,用于創(chuàng)建圖形用戶界面(GUI)。
Pillow:這是 Python 中處理圖像的庫,用于繪制和保存圖標。
首先,確保你的環(huán)境中已經(jīng)安裝了這兩個庫。可以通過以下命令安裝:
pip install wxPython Pillow
設計思路
我們的圖標將有一個簡單的設計,包含:
一個框架,模擬截圖工具的選擇區(qū)域。
兩條交叉的線,模擬截圖區(qū)域的邊界。
圖標將以三種不同的尺寸生成:16x16、48x48 和 128x128,以確保適配不同的應用場景,如應用程序圖標、任務欄圖標等。
步驟 1:創(chuàng)建 wxPython 窗口
我們首先創(chuàng)建一個簡單的 wxPython 窗口,包含:
一個文件夾選擇控件,讓用戶選擇圖標保存的目標文件夾。
一個按鈕,當點擊按鈕時生成圖標。
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))
# 創(chuàng)建面板
panel = wx.Panel(self)
# 創(chuàng)建控件
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):
# 創(chuàng)建空白圖像,背景色為白色
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)
# 繪制截取區(qū)域的對角線(模擬截圖效果)
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:創(chuàng)建圖標并保存為 PNG
圖標的生成過程通過 Pillow 庫完成。我們將創(chuàng)建一個空白的圖像,并通過 ImageDraw 類繪制框架和交叉線,模擬截圖區(qū)域。每個圖標會根據(jù)不同的尺寸保存為 PNG 格式。
def create_icon(self, size, file_path):
# 創(chuàng)建空白圖像,背景色為白色
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 文件,并運行程序。你將看到一個簡單的窗口,用戶可以選擇目標文件夾并點擊“生成圖標”按鈕。當點擊按鈕后,程序?qū)⒏鶕?jù)選擇的文件夾生成三個不同尺寸的圖標文件(icon16.png、icon48.png、icon128.png)。
結(jié)果與展示
假設你選擇的目標文件夾路徑是 C:/Users/YourUsername/Desktop/icons,運行程序后,生成的圖標文件將保存在該目錄下:
icon16.png:16x16 像素
icon48.png:48x48 像素
icon128.png:128x128 像素
這些圖標將用于各種應用場景,如在應用程序中作為程序圖標,或者作為系統(tǒng)托盤圖標等。
運行結(jié)果


本項目展示了如何結(jié)合 wxPython 和 Pillow 創(chuàng)建一個簡單的圖標生成器。用戶可以通過 GUI 選擇目標文件夾,并生成不同尺寸的 PNG 格式圖標。這種工具對于需要生成不同尺寸圖標的開發(fā)者非常有用,尤其是在需要圖標適配多種設備和分辨率時。
以上就是python使用Pillow創(chuàng)建可自定義的圖標生成器的詳細內(nèi)容,更多關(guān)于python Pillow圖標生成器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python webdriver.Chrome()的使用解讀
這篇文章主要介紹了Python webdriver.Chrome()的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Python深度學習神經(jīng)網(wǎng)絡基本原理
人工神經(jīng)網(wǎng)絡(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經(jīng)網(wǎng)絡(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經(jīng)網(wǎng)絡行為特征,進行分布式并行信息處理的算法數(shù)學模型2021-10-10
TensorFlow2.X使用圖片制作簡單的數(shù)據(jù)集訓練模型
這篇文章主要介紹了TensorFlow2.X使用圖片制作簡單的數(shù)據(jù)集訓練模型,本文通過截圖實例代碼相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
基于django micro搭建網(wǎng)站實現(xiàn)加水印功能
這篇文章主要介紹了基于django micro搭建網(wǎng)站實現(xiàn)加水印功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05

