Вот как вы можете получить файл jpeg с измененным размером из вашего элемента "myimage", используя Canvas.
Я прокомментировал каждую строку кода, чтобы вы могли понять, что я делал.
// Set the Width and Height you want your resized image to be
var width = 1920;
var height = 1080;
var canvas = document.createElement('canvas'); // Dynamically Create a Canvas Element
canvas.id = "extractFileCanvas"; // Give the canvas an id
canvas.width = width; // Set the width of the Canvas
canvas.height = height; // Set the height of the Canvas
canvas.style.display = "none"; // Make sure your Canvas is hidden
document.body.appendChild(canvas); // Insert the canvas into your page
var c=document.getElementById("extractFileCanvas"); // Get canvas from page
var ctx=c.getContext("2d"); // Get the "CTX" of the canvas
var img=document.getElementById("myimage"); // The id of your image container
ctx.drawImage(img,0,0,width,height); // Draw your image to the canvas
var jpegFile = c.toDataURL("image/jpeg"); // This will save your image as a
//jpeg file in the base64 format.
Переменная javascript "jpegFile" теперь содержит ваше изображение в формате URL: // Base64.Что выглядит примерно так:
// data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...9oADAMBAAIRAxEAPwD/AD/6AP/Z"
Вы можете либо поместить эту переменную в качестве источника изображения, и она будет отображать ваше изображение, либо вы можете загрузить закодированную строку Base64 на сервер.
Редактировать: Как преобразовать файл в большой двоичный объект и загрузить его на сервер
// This function is used to convert base64 encoding to mime type (blob)
function base64ToBlob(base64, mime)
{
mime = mime || '';
var sliceSize = 1024;
var byteChars = window.atob(base64);
var byteArrays = [];
for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {
var slice = byteChars.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
return new Blob(byteArrays, {type: mime});
}
Теперь очистите base64 и передайте его в приведенную выше функцию:
var jpegFile64 = jpegFile.replace(/^data:image\/(png|jpeg);base64,/, "");
var jpegBlob = base64ToBlob(jpegFile64, 'image/jpeg');
Теперь отправьте «jpegBlob» с помощью ajax
var oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.onload = function (oEvent) {
// Uploaded.
};
oReq.send(jpegBlob);