tauri开发中,使用node将png图片转成苹果的icns图标格式,解决tauri icon生成的mac图标过大问题

server/2024/11/17 20:40:58/

在tauri开发中,我们使用tauri icon生成的图标在windows上是正常的,但是在mac上就显示过大,也可以看tauri的issue:[v2]When using the Tauri Icon to generate icons, it is always larger than other icons in Mac · tauri-apps/tauri · Discussion #10999 · GitHub

为了解决这个烦人的问题,有两种方式,一种是单独用ps给mac做一个图标,这种方式我也写过一个文章:创建一个和tauri图标一致的icon和苹果icns图标_tauri icon-CSDN博客。另外一种方式就是写一个js脚本,让自动执行生成一个icon图标。接下来就是展示的时间了:

1.在项目cli下创建一个creatIcon.cjs脚本文件

安装依赖:

pnpm install sharp png2icons -D

创建脚本:

const fs = require('fs')
const path = require('path')
const sharp = require('sharp')
const png2icons = require('png2icons')// 输入 PNG 文件路径
const inputPath = path.join(__dirname, './app.png')
// const inputPath = path.join(__dirname, './pakeplusicon.png')
// 临时输出带圆角和 padding 的 PNG 文件路径
const processedOutputPath = path.join(__dirname, './processed-image.png')
// 输出 ICNS 文件路径
const icnsOutputPath = path.join(__dirname, '../src-tauri/icons/icon.icns')// 给图片添加圆角并添加 padding
sharp(inputPath).resize({// 确保图片尺寸一致width: 1024,height: 1024,fit: 'contain',background: { r: 0, g: 0, b: 0, alpha: 0 },}).composite([// rx ry是圆角半径{input: Buffer.from(`<svg><rect x="0" y="0" width="1024" height="1024" rx="250" ry="250" /></svg>`),blend: 'dest-in',},])// top/bottom/left/right 是 padding.extend({top: 120,bottom: 120,left: 120,right: 120,background: { r: 0, g: 0, b: 0, alpha: 0 },}).toFile(processedOutputPath).then(() => {console.log('Image processing complete with rounded corners and padding.')// 读取处理后的 PNG 文件fs.readFile(processedOutputPath, (err, data) => {if (err) {console.error('Error reading processed PNG file:', err)return}// 转换 PNG 到 ICNS 格式const icnsBuffer = png2icons.createICNS(data, 1, 0)if (icnsBuffer) {fs.writeFile(icnsOutputPath, icnsBuffer, (writeErr) => {if (writeErr) {console.error('Error writing ICNS file:', writeErr)} else {console.log('ICNS file created successfully:',icnsOutputPath)// copy icns to /Users/song/Project/my/PakePlus/src-tauri/iconsfs.copyFile(icnsOutputPath,path.join(__dirname,'../src-tauri/icons/icon.icns'),(copyErr) => {if (copyErr) {console.error('Error copying ICNS file:',copyErr)} else {console.log('ICNS file copied successfully.')}})}})} else {console.error('Failed to convert PNG to ICNS.')}})}).catch((err) => {console.error('Error during image processing:', err)})

项目结构: 

将原始图片放在cli下的app.png,然后执行命令:

node ./cli/creatIcon.cjs

最后会将新生成的icon存到src-tauri/icons/icon.icns中:


http://www.ppmy.cn/server/142731.html

相关文章

ArcGIS的汉字(亚洲文本)垂直标注

01 需求说明 实现ArcGIS的汉字&#xff08;亚洲文本的垂直标注&#xff09;。 启用 Maplex 标注引擎。 在标注 工具条上单击标注管理器按钮 。 选中要进行标注的图层旁边的复选框。 选择图层下方的标注分类。 单击符号。 选中 CJK 字符方向复选框。 仅当字体有垂直的文本度…

服务器能支持承载多少访问量??

服务器能支持承载的访问量是一个受多种因素影响的复杂问题。 以下是对该问题的详细分析&#xff1a; 一、关键影响因素 服务器的硬件配置&#xff1a; 处理器性能&#xff1a;服务器的CPU性能决定了其处理请求的速度和能力。高性能的CPU能够更快速地处理并发请求&#xff0c;…

C#使用App.config读写配置键值的简单示例

创建了.NETFramework的控制台项目&#xff0c;自动生成了App.config文件。在App.config中添加键值对&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <configuration><startup> <supportedRuntime version"v4.0" s…

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

html中select标签的选项携带多个值

搜索参考资料&#xff1a;SELECT标签中的选项可以携带多个值吗&#xff1f; 【摘抄】&#xff1a; 它可能有一个select选项中的多个值&#xff0c;如下所示。 <select id"ddlEmployee" class"form-control"> <option value"">-- S…

重学SpringBoot3-整合Quartz定时任务

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ Quartz 是一个开源的任务调度框架&#xff0c;用于在应用程序中创建、管理和调度定时任务。将 Quartz 和 Spring Boot 3 结合&#xff0c;可以轻松实现定时任务的灵活管理…

【数据结构】11.哈夫曼树哈夫曼编码

一、哈夫曼树的基本概念 哈夫曼&#xff08;Huffman&#xff09;树又称最优树&#xff0c;是一类带权路径长度最短的树&#xff0c;在实际中有广泛的用途。 路径&#xff1a; 从树中一个节点到另一个节点之间的分支构成这两个节点之间的路径。路径长度&#xff1a; 路径上的分…

鸿蒙系统(HarmonyOS)与OpenHarmony

一、概述 华为推出的鸿蒙系统&#xff08;HarmonyOS&#xff09;凭借其分布式架构及多设备协同能力在业界引起了广泛关注。与此同时&#xff0c;还有一个名为OpenHarmony的开源项目&#xff0c;它在推动物联网设备之间的互联互通。尽管两者同源&#xff0c;但它们的应用场景、…