first commit

This commit is contained in:
2026-06-25 17:41:06 +08:00
commit b2f23a933b
370 changed files with 30526 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
from PIL import Image, ImageEnhance, ImageFilter
def convert_png_to_ico(png_path, ico_path, sizes=None, resample=Image.LANCZOS, sharpen=False):
"""
将PNG图片转换为ICO图标文件,同时优化圆角效果
参数:
- png_path: 输入PNG文件路径
- ico_path: 输出ICO文件路径
- sizes: 图标尺寸列表
- resample: 重采样方法,默认为Image.LANCZOS
- sharpen: 是否应用锐化滤镜
"""
if sizes is None:
sizes = [(16, 16), (32, 32), (48, 48), (64, 64), (256, 256)]
try:
with Image.open(png_path) as img:
# 确保图片为RGBA模式
if img.mode != 'RGBA':
img = img.convert('RGBA')
# 检查是否有透明通道
has_transparency = False
if img.mode == 'RGBA':
alpha = img.getchannel('A')
if alpha.getextrema()[0] < 255:
has_transparency = True
# 为每个尺寸创建单独的图像
icon_sizes = []
for size in sizes:
# 调整图片尺寸
if size[0] < img.size[0] or size[1] < img.size[1]:
# 缩小图片时使用高质量重采样算法
resized_img = img.resize(size, resample=resample)
else:
# 放大图片时使用NEAREST算法避免模糊(适用于需要清晰边缘的情况)
resized_img = img.resize(size, resample=Image.NEAREST)
# 应用锐化滤镜(可选)
if sharpen:
enhancer = ImageEnhance.Sharpness(resized_img)
resized_img = enhancer.enhance(1.5) # 增强锐度
icon_sizes.append(resized_img)
# 保存为ICO文件
if len(icon_sizes) > 0:
# 使用第一个尺寸作为主图标
icon_sizes[0].save(
ico_path,
format='ICO',
sizes=[(img.size[0], img.size[1]) for img in icon_sizes]
)
print(f"成功将 {png_path} 转换为 {ico_path}")
print(f"包含尺寸: {sizes}")
if has_transparency:
print("注意:已保留图片的透明通道(圆角效果)")
else:
print("图片没有检测到透明通道(可能没有圆角效果)")
else:
print("错误:未指定有效尺寸")
except Exception as e:
print(f"转换失败: {e}")
if __name__ == "__main__":
# 输入和输出文件路径
png_path = 'app.png'
ico_path = 'favicon.ico'
# 调用函数进行转换,禁用锐化处理
convert_png_to_ico(png_path, ico_path, sizes=[(256, 256)], sharpen=False)