3 回答
TA贡献1860条经验 获得超9个赞
简而言之:
使用HTML5 FileReader API和.readAsArrayBuffer读取文件
使用文件数据创建e Blob,并使用window.URL.createObjectURL(blob)获取其url。
创建新的Image元素并将其src设置为文件blob url
将图像发送到画布。画布尺寸设置为所需的输出尺寸
通过canvas.toDataURL(“ image / jpeg”,0.7)从画布获取按比例缩小的数据(设置您自己的输出格式和质量)
将新的隐藏输入附加到原始表单,并基本上以普通文本的形式传输dataURI图像
在后端,读取dataURI,从Base64解码并保存
TA贡献1982条经验 获得超2个赞
我想提供自己的解决方案。此Javascript函数采用图像数据URL和宽度,将其缩放到新的宽度,然后返回新的数据URL。
// Take an image URL, downscale it to the given width, and return a new image URL.
function downscaleImage(dataUrl, newWidth, imageType, imageArguments) {
"use strict";
var image, oldWidth, oldHeight, newHeight, canvas, ctx, newDataUrl;
// Provide default values
imageType = imageType || "image/jpeg";
imageArguments = imageArguments || 0.7;
// Create a temporary image so that we can compute the height of the downscaled image.
image = new Image();
image.src = dataUrl;
oldWidth = image.width;
oldHeight = image.height;
newHeight = Math.floor(oldHeight / oldWidth * newWidth)
// Create a temporary canvas to draw the downscaled image on.
canvas = document.createElement("canvas");
canvas.width = newWidth;
canvas.height = newHeight;
// Draw the downscaled image on the canvas and return the new data URL.
ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0, newWidth, newHeight);
newDataUrl = canvas.toDataURL(imageType, imageArguments);
return newDataUrl;
}
可以在有数据URL并需要缩小图像尺寸的数据URL的任何地方使用此代码。
添加回答
举报