是否有任何技术可以转换已下载的图像 - 内联JPEG / GIF /等。网页中出现的图像 - 使用客户端JavaScript进入Base64数据?
我不是在谈论如何使用其他方式(服务器端,在线工具等)将图像转换为Base64。
这些是我特定用例的约束:
最终目标是将页面上的所有图像(在DOM中)转换为JavaScript内的Base64数据。换句话说,用户可以在页面上看到的每个图像都已转换为包含Base64数据的某种JavaScript变量。
到目前为止,我看不到所有上述限制内的帖子。
答案 0 :(得分:0)
我认为这与您正在寻找的内容非常接近,但唯一的问题是它仅适用于本地托管的图像和HTML5。
function toURL(image) {
var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext("2d");
context.drawImage(image, 0, 0);
var s = canvas.toDataURL();
return s.substring(s.indexOf(","));
}
var test = document.getElementById("myImage");
console.log(toURL(test));
您可以使用以下代码欺骗javascript,使其认为图片来自您的域。
image.php
<?php
$image = getAnImagePathAndTypeFromTheDatabaseByID($_GET["id"]);
//returns something like
//array("path" => "http://www.anotherwebsite.com/image.png", "type" => "png")
header("Content-type: image/$image[type]");
echo file_get_contents($image["path"]);
?>
然后导航到image.php?id = 1例如。
答案 1 :(得分:0)
要使其在跨域客户端中工作,您需要使用属性 crossorigin = "true" 调用图像,或者在 Logan Murphy 代码中添加一行:
function toURL(image) {
image.setAttribute('crossOrigin', 'anonymous');
var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
var context = canvas.getContext("2d");
context.drawImage(image, 0, 0);
var s = canvas.toDataURL();
return s.substring(s.indexOf(","));
}
我使用此代码:
// image-to-uri.js v1
// converts a URL of an image into a dataURI
function imageToURI(url, callback) {
// Create an empty canvas and image elements
let canvas = document.createElement('canvas');
let img = document.createElement('img');
img.onload = function () {
let ctx = canvas.getContext('2d');
// match size of image
canvas.width = img.naturalWidth || img.width;
canvas.height = img.naturalHeight || img.height;
// Copy the image contents to the canvas
ctx.drawImage(img, 0, 0);
// Get the data-URI formatted image
callback(null, canvas.toDataURL('image/png'));
};
img.ononerror = function () {
callback(new Error('FailedToLoadImage'));
};
// canvas is not supported
if (!canvas.getContext) {
setTimeout(callback, 0, new Error('CanvasIsNotSupported'));
} else {
img.setAttribute('crossOrigin', 'anonymous');
img.src = url;
};
};
基于此https://github.com/HenrikJoreteg/image-to-data-uri.js/blob/master/image-to-data-uri.js