如何从Javascript中任何图像类型的base64字符串中剥离data:image部分
我目前正在执行以下操作来解码Javascript中的base64图像:如何从Javascript中任何图像类型的base64字符串中剥离data:image部分,javascript,string,image,base64,Javascript,String,Image,Base64,我目前正在执行以下操作来解码Javascript中的base64图像: var strImage = ""; strImage = strToReplace.replace("data:image/jpeg;base64,", ""); strImage = strToReplace.replace("data:image/png;base64,", ""); strImage = strToReplace.replace("data:image/gif;base
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)
然而,其中一些图像非常大,用replace扫描每个图像4-5次似乎是一种可怕的浪费,效率极低
是否有一种方法可以在一次传递中可靠地剥离base64图像字符串的数据:图像部分
也许是通过检测字符串中的第一个逗号
提前感谢。您可以使用正则表达式:
var strImage = strToReplace.replace(/^data:image\/[a-z]+;base64,/, "");
表示在字符串的开头^
表示数据:图像数据:图像
表示/\/
表示a和z之间的一个或多个字符[a-z]+
表示;base64;base64,
var strImage = strToReplace.split(',')[1];
我遇到了这个问题,想找到一种方法来去除任何标题。所以我想分享一下:
Regex.Replace(strToReplace, @"^.+?(;base64),", string.Empty))
这是从一个优秀的网站上获得的,该网站描述了如何:
尽可能少地匹配任何字符,直到找到“abc”,而不计算“abc”
您可以使用,这样就不必扫描所有对象。它的性能应该更好使用这个正则表达式
/[data:image\/[a-z]*;[a-z0-9]*,.*]/gm
这对我来说很有效,Swift 5:
let ourBase64String:String = "base64 string"
let base64StringArray:[String] = ourBase64String.components(separatedBy: "base64,")
if(attachmentArray.count > 0){
print(attachmentArray[1])
}
我不知道这对性能是否更好,但从逻辑上来说,我会说“是”(替换和正则表达式搜索整个字符串中的匹配项,indexof在第一个字符上断开,等于它的参数),也许我会做一些性能测试:
var strImage=strotreplace.Substring(strotreplace.indexof(',')+1)
strToReplace.replace(/^data:image\/\w+;base64,/,”)
我不明白为什么这么多公认的答案都有古怪的正则表达式解决方案。这很容易理解,执行起来也很快。有什么缺点吗?@JoshuaOhana如果编码字符串中还有另一个“base64”。。。否则我不知道。。。
let ourBase64String:String = "base64 string"
let base64StringArray:[String] = ourBase64String.components(separatedBy: "base64,")
if(attachmentArray.count > 0){
print(attachmentArray[1])
}