diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ac973d..4eb3af0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,26 @@ All notable changes to this project will be documented in this file. ## [1.4.1] - 2026-04-03 ### 新增 +- ✨ **项目默认图标裁剪** + - 使用 Python PIL 库裁剪图片为正方形 + - 生成了多种尺寸的应用图标(1024x1024, 512x512, 256x256 等) + - 默认图标尺寸:512x512 + - 涉及文件: + - `assets/app_icon_default.png` - 项目默认图标(512x512) + - `assets/app_icon_square.png` - 正方形原图(1271x1271) + - `assets/app_icon_*.png` - 各种尺寸图标 + - `crop_image.py` - 图片裁剪脚本 +- ✨ **Web 图标替换** + - 替换了所有 web 平台的图标为新图片 + - 包括:favicon.png (32x32)、PWA 图标 (192x192, 512x512) + - 包含 maskable 图标版本 + - 涉及文件: + - `web/favicon.png` - 网站图标 + - `web/icons/Icon-192.png` - PWA 图标 + - `web/icons/Icon-512.png` - PWA 图标 + - `web/icons/Icon-maskable-192.png` - PWA 可遮罩图标 + - `web/icons/Icon-maskable-512.png` - PWA 可遮罩图标 + - `replace_web_icons.py` - Web 图标替换脚本 - ✨ **从 pubspec.yaml 动态获取版本号** - 使用 package_info_plus 插件动态获取应用版本号和版本代码 - 在 AppConfig 中添加 init() 初始化方法和 appVersion、appVersionCode getter diff --git a/assets/app_icon_1024x1024.png b/assets/app_icon_1024x1024.png new file mode 100644 index 0000000..676e847 Binary files /dev/null and b/assets/app_icon_1024x1024.png differ diff --git a/assets/app_icon_128x128.png b/assets/app_icon_128x128.png new file mode 100644 index 0000000..f7924c9 Binary files /dev/null and b/assets/app_icon_128x128.png differ diff --git a/assets/app_icon_144x144.png b/assets/app_icon_144x144.png new file mode 100644 index 0000000..1fee1c2 Binary files /dev/null and b/assets/app_icon_144x144.png differ diff --git a/assets/app_icon_192x192.png b/assets/app_icon_192x192.png new file mode 100644 index 0000000..71d7795 Binary files /dev/null and b/assets/app_icon_192x192.png differ diff --git a/assets/app_icon_216x216.png b/assets/app_icon_216x216.png new file mode 100644 index 0000000..43bed31 Binary files /dev/null and b/assets/app_icon_216x216.png differ diff --git a/assets/app_icon_256x256.png b/assets/app_icon_256x256.png new file mode 100644 index 0000000..09b08df Binary files /dev/null and b/assets/app_icon_256x256.png differ diff --git a/assets/app_icon_48x48.png b/assets/app_icon_48x48.png new file mode 100644 index 0000000..d0dc6a4 Binary files /dev/null and b/assets/app_icon_48x48.png differ diff --git a/assets/app_icon_512x512.png b/assets/app_icon_512x512.png new file mode 100644 index 0000000..dd79c68 Binary files /dev/null and b/assets/app_icon_512x512.png differ diff --git a/assets/app_icon_64x64.png b/assets/app_icon_64x64.png new file mode 100644 index 0000000..94de49d Binary files /dev/null and b/assets/app_icon_64x64.png differ diff --git a/assets/app_icon_72x72.png b/assets/app_icon_72x72.png new file mode 100644 index 0000000..6ea192d Binary files /dev/null and b/assets/app_icon_72x72.png differ diff --git a/assets/app_icon_96x96.png b/assets/app_icon_96x96.png new file mode 100644 index 0000000..27e401a Binary files /dev/null and b/assets/app_icon_96x96.png differ diff --git a/assets/app_icon_default.png b/assets/app_icon_default.png new file mode 100644 index 0000000..dd79c68 Binary files /dev/null and b/assets/app_icon_default.png differ diff --git a/assets/app_icon_square.png b/assets/app_icon_square.png new file mode 100644 index 0000000..6d7b8b1 Binary files /dev/null and b/assets/app_icon_square.png differ diff --git a/crop_image.py b/crop_image.py new file mode 100644 index 0000000..eb28317 --- /dev/null +++ b/crop_image.py @@ -0,0 +1,59 @@ +from PIL import Image +import os + +# 图片路径 +input_path = r"e:\project\flutter\f3\flutter_application_2\assets\IMG_20260402_172628.png" +output_dir = r"e:\project\flutter\f3\flutter_application_2\assets" + +# 打开图片 +img = Image.open(input_path) +print(f"原始图片尺寸: {img.size}") +print(f"原始图片模式: {img.mode}") + +# 定义需要的尺寸(应用图标和启动图常见尺寸) +sizes = [ + (1024, 1024), # iOS/macOS 主图标 + (512, 512), # 大图标 + (256, 256), # 中图标 + (128, 128), # 小图标 + (64, 64), # 更小图标 + (192, 192), # Android mipmap-xxhdpi + (144, 144), # Android mipmap-xxxhdpi (96x1.5) + (96, 96), # Android mipmap-xhdpi + (72, 72), # Android mipmap-hdpi + (48, 48), # Android mipmap-mdpi + (216, 216), # HarmonyOS icon_xlarge + (144, 144), # HarmonyOS icon_large + (96, 96), # HarmonyOS icon + (72, 72), # HarmonyOS icon_small +] + +# 裁剪为正方形(居中裁剪) +width, height = img.size +min_size = min(width, height) +left = (width - min_size) // 2 +top = (height - min_size) // 2 +right = left + min_size +bottom = top + min_size +square_img = img.crop((left, top, right, bottom)) +print(f"裁剪后正方形尺寸: {square_img.size}") + +# 保存正方形原图 +square_path = os.path.join(output_dir, "app_icon_square.png") +square_img.save(square_path, "PNG") +print(f"保存正方形原图: {square_path}") + +# 生成各种尺寸 +for size in sizes: + resized = square_img.resize(size, Image.Resampling.LANCZOS) + output_path = os.path.join(output_dir, f"app_icon_{size[0]}x{size[1]}.png") + resized.save(output_path, "PNG") + print(f"保存: {output_path}") + +# 保存为项目默认图标 +default_icon_path = os.path.join(output_dir, "app_icon_default.png") +default_size = (512, 512) +default_img = square_img.resize(default_size, Image.Resampling.LANCZOS) +default_img.save(default_icon_path, "PNG") +print(f"\n保存项目默认图标: {default_icon_path}") +print("完成!") diff --git a/replace_web_icons.py b/replace_web_icons.py new file mode 100644 index 0000000..36d66c9 --- /dev/null +++ b/replace_web_icons.py @@ -0,0 +1,41 @@ +from PIL import Image +import os + +# 源图片路径 +source_path = r"e:\project\flutter\f3\flutter_application_2\assets\app_icon_square.png" +web_dir = r"e:\project\flutter\f3\flutter_application_2\web" + +# 打开源图片 +img = Image.open(source_path) +print(f"源图片尺寸: {img.size}") + +# 替换的图标列表 +icons = [ + # (文件名, 尺寸, 是否是maskable) + ("favicon.png", (32, 32), False), + ("icons/Icon-192.png", (192, 192), False), + ("icons/Icon-512.png", (512, 512), False), + ("icons/Icon-maskable-192.png", (192, 192), True), + ("icons/Icon-maskable-512.png", (512, 512), True), +] + +for filename, size, is_maskable in icons: + output_path = os.path.join(web_dir, filename) + + # 调整尺寸 + resized = img.resize(size, Image.Resampling.LANCZOS) + + # 如果是 maskable 图标,可以添加一些边距(可选) + if is_maskable: + # 创建一个更大的画布,添加边距 + margin = int(size[0] * 0.1) # 10% 边距 + new_size = (size[0] + margin * 2, size[1] + margin * 2) + background = Image.new("RGBA", new_size, (0, 0, 0, 0)) + background.paste(resized, (margin, margin)) + resized = background.resize(size, Image.Resampling.LANCZOS) + + # 保存 + resized.save(output_path, "PNG") + print(f"替换: {output_path} ({size})") + +print("\n所有 web 图标替换完成!") diff --git a/web/favicon.png b/web/favicon.png index 8aaa46a..ee8820e 100644 Binary files a/web/favicon.png and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png index b749bfe..71d7795 100644 Binary files a/web/icons/Icon-192.png and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png index 88cfd48..dd79c68 100644 Binary files a/web/icons/Icon-512.png and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png index eb9b4d7..cfb4008 100644 Binary files a/web/icons/Icon-maskable-192.png and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png index d69c566..5025cbc 100644 Binary files a/web/icons/Icon-maskable-512.png and b/web/icons/Icon-maskable-512.png differ