CONVERT图像URL到Base64

use*_*089 48 javascript jquery

使用图像文件,我得到一个图像的URL,需要发送到Web服务.从那里,图像必须在我的系统上本地保存.

我正在使用的代码:

var imagepath = $("#imageid").val();// from this getting the path of the selected image

that var st = imagepath.replace(data:image/png or jpg; base64"/"");
Run Code Online (Sandbox Code Playgroud)

如何将图像URL转换为BASE64?

WoI*_*IIe 85

HTML

<img id=imageid src=https://www.google.de/images/srpr/logo11w.png>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

function getBase64Image(img) {
  var canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  var ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0);
  var dataURL = canvas.toDataURL("image/png");
  return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

var base64 = getBase64Image(document.getElementById("imageid"));
Run Code Online (Sandbox Code Playgroud)

此方法需要canvas元素,它是完美支持的.

  • 当我在JS中创建和添加`<img>`时,这不起作用,我相信.因为我得到了`未捕获的DOMException:无法在'HTMLCanvasElement'上执行'toDataURL':可能无法导出受污染的画布. (20认同)
  • @Rubinous - 请参阅[此问题](http://stackoverflow.com/questions/20424279/canvas-todataurl-securityerror).我不认为你的问题/异常与我的代码有关.否则,随意证明我错了. (4认同)
  • 这是OP问题的正确答案.为了我的缘故,我想在CSS`background-image`中使用`toDataURL`的实际结果.所以,我确实需要**所有前面的`data:image/png; base64,`stuff,所以我直接返回了dataURL的值(我不需要RegEx替换).谢谢! (2认同)
  • 您需要使用img.naturalWidth和img.naturalHeight来处理按比例缩小的图像 (2认同)
  • 我喜欢使用 `return dataURL.split(',')[1];` 而不是您的版本,是的!需要高度和宽度,我费了九牛二虎之力才发现:p (2认同)

Abu*_*mad 36

查看此答案:@HaNdTriX的/sf/answers/1419953741/

基本上,他实现了这个功能:

function toDataUrl(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
        var reader = new FileReader();
        reader.onloadend = function() {
            callback(reader.result);
        }
        reader.readAsDataURL(xhr.response);
    };
    xhr.open('GET', url);
    xhr.responseType = 'blob';
    xhr.send();
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以像这样使用它:

toDataUrl(imagepath, function(myBase64) {
    console.log(myBase64); // myBase64 is the base64 string
});
Run Code Online (Sandbox Code Playgroud)

  • 在这里,它不起作用,因为有时你得到CROS原始请求错误来使用HttpRequest来调用来自URL的接收图像. (5认同)
  • 有时,它通过 CROS 源请求使用 HttpRequest 进行调用以从 URL 接收图像时出错 (4认同)
  • Blob是一种处理图片的可怕方法,因为它使用“屏幕截图”制作图片。这意味着图像的差异大小取决于用户的屏幕分辨率 (3认同)

Hai*_*luf 9

在今天的 JavaScript 中,这也适用。

const getBase64FromUrl = async (url) => {
  const data = await fetch(url);
  const blob = await data.blob();
  return new Promise((resolve) => {
    const reader = new FileReader();
    reader.readAsDataURL(blob); 
    reader.onloadend = () => {
      const base64data = reader.result;   
      resolve(base64data);
    }
  });
}

getBase64FromUrl('https://lh3.googleusercontent.com/i7cTyGnCwLIJhT1t2YpLW-zHt8ZKalgQiqfrYnZQl975-ygD_0mOXaYZMzekfKW_ydHRutDbNzeqpWoLkFR4Yx2Z2bgNj2XskKJrfw8').then(console.log)
Run Code Online (Sandbox Code Playgroud)

  • 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。 (9认同)