Примечание. Это работает, только если изображение находится из того же домена, что и страница, или имеет атрибут crossOrigin="anonymous"
, а сервер поддерживает CORS. Он также не даст вам исходный файл, а даст вам перекодированную версию. Если вам нужно, чтобы результат был идентичен оригиналу, см. ответ Кайидо.
Вам нужно будет создать элемент холста с правильными размерами и скопировать данные изображения с помощью функции drawImage
. Затем вы можете использовать функцию toDataURL
для получения URL-адреса data: с изображением в кодировке base-64. Обратите внимание, что изображение должно быть полностью загружено, иначе вы просто получите пустое (черное, прозрачное) изображение.
Было бы что-то вроде этого. Я никогда не писал скрипт Greasemonkey, поэтому вам может потребоваться настроить код для работы в этой среде.
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.
var dataURL = canvas.toDataURL("image/png");
return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}
Получение изображения в формате JPEG не работает в более старых версиях (около 3.5) Firefox, поэтому, если вы хотите поддерживать это, вам необходимо проверить совместимость. Если кодировка не поддерживается, по умолчанию используется «image / png».
person
Matthew Crumley
schedule
01.06.2009