上传前调整图像大小而不预览 javascript
Image resize before upload without preview javascript
我想避免上传 big/heavy 图片文件。
我更喜欢 HTML5 FileAPI 库来完成这项工作。
添加了所有其他功能(上传、重新排序等),所以我只需要图像调整大小功能。
案例:
页面上有多个文件的输入。
在输入更改事件(添加文件时)时,调整输入的 images/files 大小并将它们附加到 FormData(),然后通过 ajax 将 FormData() 发送到 PHP 脚本.
示例:
$('input').on('change',function(){
var formData = resizeImages(this.files[0]);
uploadResizedImages(formData);
});
function resizeImages(files){
formData = new FormData();
//For each image, resize it and append to formData
//resize file part missing....
formData.append('files[]',this);//Appending to formData (this = currently iterated file)
return formData;//Return the formData with resized images
}
有人吗?
谢谢
根据我的经验,您无法在客户端操作图像,然后通过表单中的文件输入完整上传操作后的图像。
我过去做你想做的事情的方法涉及几个步骤。
- Select图像使用文件输入
- 将文件读取为 dataURL
- 根据需要使用canvas操作图像
- 将新图像导出为 dataUrl
- 使用ajax将图片作为dataURL上传到服务器
- 使用服务器端函数将 dataUrl 转换为图像并存储
https://jsfiddle.net/0hmhumL1/
function resizeInCanvas(img){
///////// 3-3 manipulate image
var perferedWidth = 2700;
var ratio = perferedWidth / img.width;
var canvas = $("<canvas>")[0];
canvas.width = img.width * ratio;
canvas.height = img.height * ratio;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0,0,canvas.width, canvas.height);
//////////4. export as dataUrl
return canvas.toDataURL();
}
当作为 dataUrl 上传时,您将处理图像的大小(所需带宽)增加了大约 20%,因此除非您大幅更改图像大小,否则您可能看不到想要的节省。
我想避免上传 big/heavy 图片文件。
我更喜欢 HTML5 FileAPI 库来完成这项工作。
添加了所有其他功能(上传、重新排序等),所以我只需要图像调整大小功能。
案例:
页面上有多个文件的输入。
在输入更改事件(添加文件时)时,调整输入的 images/files 大小并将它们附加到 FormData(),然后通过 ajax 将 FormData() 发送到 PHP 脚本.
示例:
$('input').on('change',function(){
var formData = resizeImages(this.files[0]);
uploadResizedImages(formData);
});
function resizeImages(files){
formData = new FormData();
//For each image, resize it and append to formData
//resize file part missing....
formData.append('files[]',this);//Appending to formData (this = currently iterated file)
return formData;//Return the formData with resized images
}
有人吗?
谢谢
根据我的经验,您无法在客户端操作图像,然后通过表单中的文件输入完整上传操作后的图像。
我过去做你想做的事情的方法涉及几个步骤。
- Select图像使用文件输入
- 将文件读取为 dataURL
- 根据需要使用canvas操作图像
- 将新图像导出为 dataUrl
- 使用ajax将图片作为dataURL上传到服务器
- 使用服务器端函数将 dataUrl 转换为图像并存储
https://jsfiddle.net/0hmhumL1/
function resizeInCanvas(img){
///////// 3-3 manipulate image
var perferedWidth = 2700;
var ratio = perferedWidth / img.width;
var canvas = $("<canvas>")[0];
canvas.width = img.width * ratio;
canvas.height = img.height * ratio;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0,0,canvas.width, canvas.height);
//////////4. export as dataUrl
return canvas.toDataURL();
}
当作为 dataUrl 上传时,您将处理图像的大小(所需带宽)增加了大约 20%,因此除非您大幅更改图像大小,否则您可能看不到想要的节省。