使用 jquery 文件上传在上传前压缩图像
compress images before uploading using jquery file upload
我正在使用 jquery file upload plugin 直接上传到 s3,我试图在上传之前压缩图像,我尝试了选项 imageQuality: 0.8
fileInput.fileupload({
fileInput: fileInput,
url: my_url
type: 'POST',
paramName: 'file',
dataType: 'XML',
replaceFileInput: false,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
maxFileSize: 999000,
imageQuality: 0.8,
// .....
})
但是上传后图片大小没有压缩
我不确定 imageQuality
在这里是否正确,但我也对任何其他选择持开放态度:
例如:我自己也创建了一个压缩图片的函数,那个函数return图片Blob,我就是不知道怎么说JQuery 文件上传 使用该 blob 而不是输入文件中的图像
我将在找到解决方案后回答我的问题,希望这对以后的人有所帮助:
要使用 jquery 文件上传压缩图像,有 2 种解决方案,您可以使用插件提供的压缩功能,或者创建自己的压缩功能并将其与 jquery 文件上传一起使用,我最终使用了第二种解决方案
第一个解法:
我偶然发现的是这个link:https://github.com/blueimp/jQuery-File-Upload/wiki/Client-side-Image-Resizing
所以你基本上需要做的是在你的项目中导入以下文件:jquery.js, jquery.ui.widget.js, load-image.all.min.js, canvas-to-blob.min.js, jquery.iframe-transport.js, jquery.fileupload.js, jquery.fileupload-process.js, jquery.fileupload-image.js
然后查看 jQuery 文件上传的选项,我找到了选项 imageQuality,阅读它,它说:
imageQuality: Sets the quality parameter given to the canvas.toBlob() call when
saving resized images.
因此 imageQuality 选项似乎仅在调整图像大小时有效,但在我的情况下我不需要调整图像大小,但您可以使用其他选项imageForceResize,通过结合这两个选项你可以使压缩工作,但还需要第三个选项disableImageResize,这个选项默认设置为true,所以我们需要将其设置为 false 以允许调整图像大小。
最终代码如下所示:
$('#file_input').fileupload({
# these 3 options are necessary together for compressing
disableImageResize: false,
imageForceResize: true,
imageQuality: 0.7,
// ......
})
第二种解法:
如果你想使用自己的压缩功能,我认为这是最好的方法,那么在这种情况下你只需要 jquery.js, jquery.ui.widget.js, jquery.fileupload.js
Jquery 文件上传 在提交之前将要上传的文件存储在data.files
中,所以你要做的就是有一个压缩图像的功能和return 一个 blob 数组,然后覆盖 data.files
$('#file_input').fileupload({
add: function(e, data){
// .......
data.files = compress_images_function()
data.submit()
}
})
我正在使用 jquery file upload plugin 直接上传到 s3,我试图在上传之前压缩图像,我尝试了选项 imageQuality: 0.8
fileInput.fileupload({
fileInput: fileInput,
url: my_url
type: 'POST',
paramName: 'file',
dataType: 'XML',
replaceFileInput: false,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
maxFileSize: 999000,
imageQuality: 0.8,
// .....
})
但是上传后图片大小没有压缩
我不确定 imageQuality
在这里是否正确,但我也对任何其他选择持开放态度:
例如:我自己也创建了一个压缩图片的函数,那个函数return图片Blob,我就是不知道怎么说JQuery 文件上传 使用该 blob 而不是输入文件中的图像
我将在找到解决方案后回答我的问题,希望这对以后的人有所帮助:
要使用 jquery 文件上传压缩图像,有 2 种解决方案,您可以使用插件提供的压缩功能,或者创建自己的压缩功能并将其与 jquery 文件上传一起使用,我最终使用了第二种解决方案
第一个解法:
我偶然发现的是这个link:https://github.com/blueimp/jQuery-File-Upload/wiki/Client-side-Image-Resizing
所以你基本上需要做的是在你的项目中导入以下文件:jquery.js, jquery.ui.widget.js, load-image.all.min.js, canvas-to-blob.min.js, jquery.iframe-transport.js, jquery.fileupload.js, jquery.fileupload-process.js, jquery.fileupload-image.js
然后查看 jQuery 文件上传的选项,我找到了选项 imageQuality,阅读它,它说:
imageQuality: Sets the quality parameter given to the canvas.toBlob() call when saving resized images.
因此 imageQuality 选项似乎仅在调整图像大小时有效,但在我的情况下我不需要调整图像大小,但您可以使用其他选项imageForceResize,通过结合这两个选项你可以使压缩工作,但还需要第三个选项disableImageResize,这个选项默认设置为true,所以我们需要将其设置为 false 以允许调整图像大小。
最终代码如下所示:
$('#file_input').fileupload({
# these 3 options are necessary together for compressing
disableImageResize: false,
imageForceResize: true,
imageQuality: 0.7,
// ......
})
第二种解法:
如果你想使用自己的压缩功能,我认为这是最好的方法,那么在这种情况下你只需要 jquery.js, jquery.ui.widget.js, jquery.fileupload.js
Jquery 文件上传 在提交之前将要上传的文件存储在data.files
中,所以你要做的就是有一个压缩图像的功能和return 一个 blob 数组,然后覆盖 data.files
$('#file_input').fileupload({
add: function(e, data){
// .......
data.files = compress_images_function()
data.submit()
}
})