【问题标题】:Convert binary / unicode string to image将二进制/unicode字符串转换为图像
【发布时间】:2019-11-08 11:49:13
【问题描述】:

我正在使用库通过 OAuth 和代理从 salesforce 接收附件(图像)。如果没有库(和代理),我可以使用 XHR,但我必须使用库,因为我需要代理。

在 chrome 调试器中,我可以看到图像下载正常,但我无法让它在我的代码中工作。数据如下:

到目前为止我尝试过的方法:

  1. btoa(unescape(encodeURIComponent(file.body)));- 生成不起作用的 base64。使用在线工具对其进行解码会返回相同的字符串。

  2. escape(file.body) - 将其用作 base64 也不起作用。

  3. 转换为 blob。 var blob = new Blob([file.body], {type : "image/png"}); urlCreator.createObjectURL(blob); 它指向的 url 不显示任何内容,如果我删除 {type : "image/png"},则 url 指向显示相同二进制字符串的页面。

【问题讨论】:

标签: javascript ajax


【解决方案1】:

长话短说,这看起来像是有人使用 readAsText() 读取图像,它将二进制文件转换为 utf8,而不是 utf16。理想情况下,您需要让服务器以 arraybuffer 或 blob 格式甚至 base64 格式返回数据,这些保留二进制文件。

带有 sn-p 的长版本。 (sn-p 中的那些问号符号显示丢失的信息,将其与在 utf16 中它们不是问号的二进制文件进行比较): https://stackoverflow.com/a/56523118/2962797

【讨论】:

    【解决方案2】:

    我将创建一个<img /> 元素,将其src 属性与您收到的图像数据相等。现在你有图像了。

    如果您想提取它或将其转换为 PNG,我会应用另一个 answer 进程。

    【讨论】:

    • 你的意思是直接将二进制字符串设置为src?那没有用,并给了GET http://localhost:8000/%EF%BF%BDPNG%1A%EF%BF%BD%EF%BF%BD ....net::ERR_CONNECTION_REFUSED
    • @VarunGarg 我tried 来做这件事,它奏效了。你给我提供了字符串。
    • 该字符串是我在 chrome 开发工具中看到的,而不是我从库中得到的(请看截图)。
    • @VarunGarg 好的,我明白了。但是该图像是 JPEG,当您尝试使用您使用的第三种方法对其进行解码时,您尝试解码的是 PNG。
    • 它实际上是一个png,这里返回的content type是错误的(jpeg),但这仅适用于这种情况。在其他情况下是正确的,例如image/png
    猜你喜欢
    • 2013-02-11
    • 2020-02-16
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多