javascript - 获取图像的 Base64 编码的跨源问题

标签 javascript image canvas base64 cors

我正在为 4chan 制作一个“简单”书签(可能可以扩展到其他站点),它将下载当前线程中的所有图像作为 zip 存档。 4chan 线程中显示的图像只是缩略图。图像本身以链接形式提供,可以通过单击缩略图进行访问。

我的代码应该几乎完美地工作。我找到了包含全尺寸图像链接的类。我用 jquery 选择所有这些。我正在使用 JSZip 来编译图像。但 JSZip 需要以 base64 编码的图像数据。在搜寻了执行此操作的方法之后,似乎几乎一致认为将图像绘制到 Canvas 上并将图像转换为 base64 这种方式是最好的方法。然而,由于 4chan 提供了其图像的链接,而不是它们就在网站中,因此当我在 Canvas 上绘制链接图像时, Canvas 会被“污染”,并且无法从中获取 Base64 编码。

我怎样才能以不同的方式做到这一点才能发挥作用?有没有办法解决跨源问题?我尝试将 crossorigin="anonymous" 添加到我正在创建的图像中,但它不起作用。

最佳答案

var getDataUri = function (targetUrl, callback) {
    var xhr = new XMLHttpRequest();
    xhr.onload = function () {
        var reader = new FileReader();
        reader.onloadend = function () {
            callback(reader.result);
        };
        reader.readAsDataURL(xhr.response);
    };
    var proxyUrl = 'https://cors-anywhere.herokuapp.com/';
    xhr.open('GET', proxyUrl + targetUrl);
    xhr.responseType = 'blob';
    xhr.send();
};
getDataUri(path, function (base64) {
    // base64 availlable here
})

转换为 base64 时,您可以在图像路径之前使用代理 URL ( https://cors-anywhere.herokuapp.com/ ) 以避免跨域问题

关于javascript - 获取图像的 Base64 编码的跨源问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20920965/

相关文章:

javascript - 需要有关此切换的帮助,几乎没有变化

c++ - 屏幕截图仅返回黑色图像

string - 如何找到一堆最接近的字符串?

javascript - html5 canvas调整图片大小使用的算法是什么?

javascript - 如何制作一个 for 循环,在圆形动画完成之前重新启动它,使其看起来像一个脉动的圆圈

javascript - Node JS 需要没有 var

javascript - 为什么我只在对象位于 "for loop"时获取第一个对象并在 vuejs 中返回其值?

c++ - 在 OpenCV 中合并两个 Mat 对象

Android Canvas - 在所有屏幕分辨率上将带有 drawText 的文本定位在同一位置

javascript - JavaScript 中断标签的可移植性如何?