javascript - JSON 图像 url 而不是 base64

标签 javascript json three.js base64

我正在使用 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/

相关文章:

javascript - 在 THREE.js 中,如何将一个纹理映射到 3D 矩形

javascript - 使用 Javascript window.open 和 jQuery 提交表单

javascript - 在 IOS 上使用 ajax 上传 html5 canvas 内容

javascript - 动态 HTML 元素中的多个 JSON 或 JavaScript 对象

Javascript:如何更改点击事件上的 TextGeometry?

javascript - 如何从 Object3D 创建 BufferGeometry?

javascript - ES6 类超出最大调用堆栈大小

javascript - SlideDown 功能需要点击两次才能工作

C++ - 将 rapidjson::Document 作为参数传递给函数

json - 值不能为空。启动器中的参数名称 : connectionString appsettings. json