我有一张图像存储在缓冲区中。我试图将其设置为窗口图标,但我找不到方法。没有图像的路径,所以我不能只使用
win.setIcon('path/to/image')
。
我尝试执行以下操作,但没有成功。
win.setIcon(buffer); // giving the buffer by itself
win.setIcon(buffer.toString('base64')); // giving the buffer as base64
win.setIcon(`data:image/png;base64,${buffer.toString('base64')}`); // giving as base64 url
let imageObject = new Image();
imageObject.src = `data:image/png;base64,${buffer.toString('base64')}`;
win.setIcon(imageObject); // giving image object
根据 Electron 的文档,
BrowserWindow.setIcon ()
采用字符串或 NativeImage
(Electron 提供的数据类型)。您可以使用以下代码将缓冲区转换为 NativeImage
:
const { nativeImage } = require ("electron");
win.setIcon (nativeImage.createFromBuffer (buffer));
如果这没有帮助,您还可以将缓冲区作为数据 URL 中的 Base 64 字符串(就像您之前尝试过的那样)传递给函数
createFromDataURL
。有关更多信息,请参阅 NativeImage
上的 文档。还值得注意的是,您可以将高级选项传递给 createFromBuffer
函数,以便为 Electron 提供有关如何显示图标的更多提示。
在尝试将 base64 图像显示为 Electron 图标时,我遇到了同样的问题,但设法使用以下方法修复它:
const { nativeImage } = require ("electron");
cont asset = buffer.toString('base64');
win.setIcon(nativeImage.createFromDataURL(`data:image/png;base64,${asset}`));
// or directly set it on the createWindow function as
icon: nativeImage.createFromDataURL(`data:image/png;base64,${asset}`),
有关更多信息,请查看 NativeImage 上的文档。