我正在使用 Three.js 在数据库中保存和加载对象。我正在将对象作为 JSON 插入。
问题是 JSON.stringify 或 toJSON() 将图像 url(纹理)转换为 base64,而我想保留 http url。
这是原始 JSON:
{
"metadata": {
[...]
},
"geometries": [
{
[...]
}],
"materials": [
{
[...]
}],
"textures": [
{
[...]
}],
"images": [
{
"uuid": "4ED9CE3E-7C8A-4EB7-8CF8-D90B3527DF5F",
"url": "data:image/png;base64,iVBORw0KGgoATyuRZGZVREd0FAERRRBAEBEFwAYEyKqP/Rfozx+5fDYjvpeT/akv+n/J+/7eMjX9Ke8uojP4JVAYAyuj/Ld3Por7fPQ9i8d7vvr8LKNzLg/dn1u1hvQf3q/v92vRX0X/ [...]"
}],
"object": {
[...]
}
}
所需的 JSON 类型是这样的:
{
"metadata": {
[...]
},
"geometries": [
{
[...]
}],
"materials": [
{
[...]
}],
"textures": [
{
[...]
}],
"images": [
{
"uuid": "4ED9CE3E-7C8A-4EB7-8CF8-D90B3527DF5F",
"url": "http://www.domain.com/picture/path.png"
}],
"object": {
[...]
}
}
有解决办法吗?
最佳答案
我遇到了同样的问题,并通过覆盖 Source.toJSON()
解决了它,如下所示:
Source.prototype.toJSON = function ( meta ) {
const isRootObject = ( meta === undefined || typeof meta === 'string' );
if ( !isRootObject && meta.images[ this.uuid ] !== undefined ) {
return meta.images[ this.uuid ];
}
const output = {
uuid: this.uuid,
url: this.data.src
};
if ( !isRootObject ) {
meta.images[ this.uuid ] = output;
}
return output;
}
或者,您可以使用 this.data.getAttribute('src')
存储图像的相对 URL。
关于javascript - JSON 图像 url 而不是 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33866807/