Javascript - 是否可以base64远程图像?

时间:2014-09-30 02:47:08

标签: javascript base64

我有以下

HTML

<img id="preview1" crossorigin="anonymous" src="http://www.gravatar.com/avatar/0e39d18b89822d1d9871e0d1bc839d06?s=128&d=identicon&r=PG">

JS

var img = document.getElementById("preview1");
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.width;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/png");
var result = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
console.log(result)

出于某种原因,当我将result(base64)粘贴到img src时,它什么都没有显示。此外,当我将result(base64)粘贴为网址时,它不会显示任何内容。

当我使用input="file"并使用FileReader()获取文件时。它工作正常。

抓住远程文件并转换为工作版64是一种更好的方法吗?

1 个答案:

答案 0 :(得分:-1)

编辑:下面的代码 NOT 使用远程图像。抱歉,正在使用'--disable-web-security'标志运行Chrome。

我制作了一个简单的JsFiddle,其中包含您想要的工作版本。

function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    // Get the data-URL formatted image
    // Firefox supports PNG and JPEG. You could check img.src to
    // guess the original format, but be aware the using "image/jpg"
    // will re-encode the image.
    return canvas.toDataURL("image/png");
}

var im = new Image();
im.onload = function(ev) {
    var im = ev.target;
    var img = document.getElementById("preview1");
    img.src = getBase64Image(im);
}
im.src = "http://www.gravatar.com/avatar/0e39d18b89822d1d9871e0d1bc839d06?s=128&d=identicon&r=PG"

哦,我无耻地从其他answer

复制了getBase64Image方法