Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

服务端如何使用本地图片 #248

Open
imindzzz opened this issue Jul 20, 2021 · 6 comments
Open

服务端如何使用本地图片 #248

imindzzz opened this issue Jul 20, 2021 · 6 comments

Comments

@imindzzz
Copy link

如题

尝试使用path拼接路径,fs.existsSync检测文件是存在的,但是preload并不能加载。
是不支持,还是有其它写法?

console.log(fs.existsSync(path.join(process.cwd(), "images", "header.png")));
await scene.preload({
  id: "headerSprite",
  src: path.join(process.cwd(), "images", "header.png"),
});

image

@imindzzz
Copy link
Author

imindzzz commented Jul 20, 2021

实在不支持的话,我的备选方案是datauri,尝试了一下是支持datauri的。

@akira-cn
Copy link
Contributor

你好,读本地资源是支持的,但是需要用file协议

await scene.preload({
  id: "headerSprite",
  src: `file:///${path.join(process.cwd(), "images", "header.png")}`,
});

@imindzzz
Copy link
Author

file协议测试不可行,

 await scene.preload({
    id: "headerSprite",
    src: `file:///${path.join(process.cwd(), "images", "header.png")}`,
  });

windows 本地开发环境不行(排除了常见的“中文路径”问题)
image

linux 测试环境不行 image

@akira-cn
Copy link
Contributor

akira-cn commented Aug 9, 2021

我想起来,你可以重写 ENV.loadImage 方法

import ENV from 'spritejs';

ENV.loadImage = function(src) {
  // 这里实现从本地加载文件
}

@imindzzz
Copy link
Author

重写也没啥用吧,源代码也就是返回个Image,还是得src
https://github.com/Automattic/node-canvas/blob/12e671decd5bce8cca6040643117249d6b15cea7/index.js#L22

虽然他注释里写了支持local,但是我这就是不支持呢
https://github.com/Automattic/node-canvas/blob/12e671decd5bce8cca6040643117249d6b15cea7/lib/image.js#L26

空了再研究一下

@imindzzz
Copy link
Author

先贴一下base64的临时方案

import fs from "fs";
import mineType from "mime-types";

export default async (filePath: string) => {
  const type = mineType.lookup(filePath);
  var data = await fs.promises.readFile(filePath, { encoding: "base64" });
  return "data:" + type + ";base64," + data;
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants