如何从Javascript中任何图像类型的base64字符串中剥离数据:图像部分

Posted

技术标签:

【中文标题】如何从Javascript中任何图像类型的base64字符串中剥离数据:图像部分【英文标题】:How can I strip the data:image part from a base64 string of any image type in Javascript 【发布时间】:2016-12-02 15:36:59 【问题描述】:

我目前正在执行以下操作以在 javascript 中解码 base64 图像:

    var strImage = "";
    strImage = strToReplace.replace("data:image/jpeg;base64,", "");
    strImage = strToReplace.replace("data:image/png;base64,", "");
    strImage = strToReplace.replace("data:image/gif;base64,", "");
    strImage = strToReplace.replace("data:image/bmp;base64,", "");

正如您在上面看到的,我们接受四种最标准的图像类型(jpeg、png、gif、bmp);

但是,其中一些图像非常大,用替换扫描每张图像 4-5 次似乎是一种可怕的浪费,而且效率极低。

有没有一种方法可以可靠地一次性剥离 base64 图像字符串的 data:image 部分?

也许通过检测字符串中的第一个逗号?

提前致谢。

【问题讨论】:

【参考方案1】:

你可以使用正则表达式:

var strImage = strToReplace.replace(/^data:image\/[a-z]+;base64,/, "");

^ 表示 在字符串的开头 data:image 表示 数据:图像 \/ 表示 / [a-z]+ 表示 a 和 z 之间的一个或多个字符 ;base64, 表示 ;base64,

【讨论】:

我不知道性能是否更好,但逻辑上我会说“是”(替换和正则表达式搜索整个字符串中的匹配项,indexof 在第一个字符上中断等于它是参数),也许我会做一些性能测试:var strImage = strToReplace.Substring(strToReplace.IndexOf(',')+1); strToReplace.replace(/^data:image\/\w+;base64,/, "")【参考方案2】:
var solution = string.split("base64,")[1];

在“base64”处拆分变量字符串,而不是取第二部分。

【讨论】:

我不明白为什么这么多公认的答案都有古怪的正则表达式解决方案。这很容易理解并且执行得非常快。有什么缺点吗? @JoshuaOhana 如果编码字符串中还有另一个“base64”...否则我不知道...【参考方案3】:

这对我有用:

var strImage = strToReplace.split(',')[1];

【讨论】:

【参考方案4】:

我遇到了这个问题,正在寻找一种去除任何标题的方法。所以只想分享这个:

Regex.Replace(strToReplace, @"^.+?(;base64),", string.Empty))

从一个优秀的answer 那里得到这个,它描述了如何:

尽可能少地匹配任何字符,直到找到“abc”,不计算“abc”。

【讨论】:

我喜欢这个替换答案,因为它不仅可以处理任何文件类型,而且如果您传递了一个 不是 以数据为前缀的 base64 字符串,它也不会出错: file.base64.replace(/^.+?(;base64),/, '')【参考方案5】:

使用这个正则表达式

/[data:image\/[a-z]*;[a-z0-9]*,.*]/gm

【讨论】:

【参考方案6】:

您可以使用startWith,这样您就不必扫描所有对象。它的性能应该会好很多

【讨论】:

【参考方案7】:

这对我有用 Swift 5:

let ourBase64String:String = "base64 string"
let base64StringArray:[String] = ourBase64String.components(separatedBy: "base64,")
if(attachmentArray.count > 0)
   print(attachmentArray[1])

【讨论】:

以上是关于如何从Javascript中任何图像类型的base64字符串中剥离数据:图像部分的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中将图像从 base 64 转换为它们的文件类型?

如何使用 javascript 获取 base64 编码图像的地址

从base64数据字符串保存画布图像服务器端时,它会产生空白图像

如何在MATLAB中读出base64图像?

Angular 2 将图像编码为 base64

在PHP中从base64字符串中检测图像类型