【问题标题】:adding metadata in Image file created from base64 string javascript在从 base64 字符串 javascript 创建的图像文件中添加元数据
【发布时间】:2019-01-01 15:04:45
【问题描述】:

我有一个将 base64 字符串转换为相应图像文件的现有代码。现在,我想添加一些元数据,例如上次修改日期、摄影师、版权、学分等。在下面尝试过,但没有成功。有没有办法添加元数据?

这里的 base64Source 是我从中获取 base 64 内容的 dataUri。

function (base64Source, name) {
        var base64Content = base64Source.substr(base64Source.indexOf(',') + 1);

        var byteString = window.atob(base64Content);
        var ia = new Uint8Array(byteString.length);
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
        }

        var file = new Blob([ia], {type: 'image/jpeg'});
        return new File([the_file], name);
    };

我将这段代码修改为

function (base64Source, name) {
        var base64Content = base64Source.substr(base64Source.indexOf(',') + 1);

        var byteString = window.atob(base64Content);
        var ia = new Uint8Array(byteString.length);
        for (var i = 0; i < byteString.length; i++) {
            ia[i] = byteString.charCodeAt(i);
        }

        var file = new Blob([ia], {type: 'image/jpeg'});
        return new File([the_file], name,{
            lastModified: new Date().getTime(), 
            tooltip : 'test tooltip',
            caption : 'test caption',
            copyright : 'Test',
            credits : 'Test'
        });
    };

【问题讨论】:

  • github.com/hMatoba/piexifjs 这样的内容会有所帮助吗?
  • 谢谢卢克。但是,我需要使用更新的元数据创建文件并将其保存在一些 s3 中
  • 这是一个amazon-s3 的问题。我不知道 s3 的细节,但元数据应该使用标头或 URL 参数发布。
  • 我希望像摄影师、版权等一样更新文件的元数据,而不是 stackoverflow.com/questions/41292005/… 中提到的 s3 元数据
  • @user123475 - 你找到解决方案了吗?如果是,请分享

标签: javascript angularjs file amazon-s3 base64


【解决方案1】:

这些元数据应该是文件数据本身的一部分。

javascript File 对象不会改变文件的数据(除了 File 继承自 Blob constructor 的 EOL endings 选项)

因此您必须实际修改文件的数据(即包含在 ia 的 ArrayBuffer 中的字节)。

您的处理方式取决于您处理的图像类型。不同的图像格式对于它们可以接受哪些元数据以及应如何将其存储在文件中具有不同的规则。

例如,对于 JPEG 文件、TIFF 和 webp 格式,通常将其保存在 EXIF 数据中,存储在 Application Segment 中,可通过 JPEG 的 0xFFE1 标记来识别。 webpchunkHeader('EXIF') 标记它。他们也都支持XMP
PNG 还允许一些text-info 元数据。

其他文件格式可能支持其他元数据格式,而为您编写一个通用编码器将是一项非常艰巨的工作。

但确实存在一些用于最常见格式的库(使用您最喜欢的网络搜索工具很容易找到 JPEG 的 EXIF 格式)。

【讨论】:

  • 感谢 Kaiido 的详细解释。在裁剪原始图像后生成图像时,我需要更新图像元数据。我使用 指令来裁剪丢失原始图像元数据的图像。你有什么更好的方法吗?
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 2019-01-13
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多