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

在tauri开发中,我们使用tauri icon生成的图标在windows上是正常的,但是在mac上就显示过大,也可以看tauri的issue:v2When 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脚本文件

安装依赖:

javascript 复制代码
pnpm install sharp png2icons -D

创建脚本:

javascript 复制代码
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/icons
                        fs.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,然后执行命令:

javascript 复制代码
node ./cli/creatIcon.cjs

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

相关推荐
ACP广源盛1392462567319 分钟前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256731 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
mashang12345678911 小时前
mac安装SnailGitLite并配置Beyond Compare
前端·macos
深念Y1 天前
PVE 安装黑苹果并直通 Quadro P400
macos·ios·黑苹果·驱动·苹果·英伟达·p400
ACP广源盛139246256731 天前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#IX6024 PCIe2.0 交换芯片在轻量化 AI 服务中的机会与应用场景
大数据·数据库·人工智能·嵌入式硬件·macos·开源
sysinside2 天前
VMware Fusion 26H1u1 for Mac - 领先的免费桌面虚拟化软件
macos·fusion
夕小瑶2 天前
豆包工作」升级实测:多Agents并行,操作Mac电脑
macos
黄一一9112432 天前
跨平台视频图片压缩互转!离线视频压缩工具!Github开源轻松无损压缩视频!Win/Mac/Linux三端通用开源工具
windows·macos·音视频·开源软件
秋雨梧桐叶落莳2 天前
【iOS】从源码深入理解RunLoop机制
macos·ios·objective-c·cocoa·cocoapods·uikit
别走!万哥爱你3 天前
Mac访达中不显示iPad或iPhone怎么办?
macos·iphone·ipad