electron托盘图标模糊,怎么解决?
给出代码解决或图片
在 Electron 中解决托盘图标模糊问题的关键是提供多分辨率图标并正确设置缩放参数。以下是具体解决方案:
const { app, Tray, nativeImage } = require('electron')
const path = require('path')
function createTray() {
// 根据系统缩放比例自动选择图标
const iconPath = path.join(
__dirname,
`assets/icons/tray/${process.platform === 'win32' ? 'windows' : 'mac'}`,
`icon${getBestIconSuffix()}.png`
)
const image = nativeImage.createFromPath(iconPath)
image.setTemplateImage(true) // macOS 需要设置为模板图
const tray = new Tray(image)
}
// 获取最佳图标后缀
function getBestIconSuffix() {
const scaleFactor = require('electron').screen.getPrimaryDisplay().scaleFactor
return scaleFactor >= 2 ? '@2x' : ''
}
关键步骤说明:
图标文件规范:
准备两套图标文件:
icon.png
(基础尺寸,建议 16x16/24x24)icon@2x.png
(高分辨率,建议 32x32/48x48).ico
格式(包含多个尺寸)文件目录结构:
assets/
└── icons/
└── tray/
├── windows/
│ ├── icon.ico
│ └── icon@2x.ico
└── mac/
├── icon.png
└── icon@2x.png
Windows 专用处理:
// 使用 ICO 文件包含多尺寸图标
if (process.platform === 'win32') {
const iconPath = path.join(__dirname, 'assets/icons/windows/icon.ico')
const image = nativeImage.createFromPath(iconPath)
tray.setImage(image)
}
注意事项:
nativeImage
处理图标加载,不要直接使用文件路径监听显示器缩放变化动态更新图标:
screen.on('display-metrics-changed', () => {
tray.setImage(nativeImage.createFromPath(getCurrentIconPath()))
})
图标尺寸建议:
平台 | 标准尺寸 | 高分屏尺寸 |
---|---|---|
Windows | 16x16, 24x24 | 32x32, 48x48 |
macOS | 22x22 | 44x44 |
通过以上方法可以确保在不同DPI缩放比例(100%/150%/200%)下都能显示清晰的托盘图标。
10 回答10.8k 阅读
7 回答11k 阅读
6 回答2.7k 阅读
2 回答11.6k 阅读✓ 已解决
5 回答4.5k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决