我想在上传到服务器之前使用javascript或jQuery在客户端裁剪和压缩图像。
WorkFlow:
以前有人这样做过吗?什么插件或我该怎么办?
我看到facebook可以压缩图像并在上传前自动调整大小。
答案 0 :(得分:13)
您可以使用base64进行操作,查看我正在使用的网站:http://www.wordirish.com 所有图像都在客户端使用HTML5或旧浏览器的flash进行操作。
你只需要这样做:
function thisFunctionShoulBeCallByTheFileuploaderButton(e){
e.preventDefault && e.preventDefault();
var image, canvas, i;
var images = 'files' in e.target ? e.target.files : 'dataTransfer' in e ? e.dataTransfer.files : [];
if(images && images.length) {
for(i in images) {
if(typeof images[i] != 'object') continue;
image = new Image();
image.src = createObjectURL(images[i]);
image.onload = function(e){
var mybase64resized = resizeCrop( e.target, 200, 150 ).toDataURL('image/jpg', 90);
alert(mybase64resized);
}
}
}
}
function resizeCrop( src, width, height ){
var crop = width == 0 || height == 0;
// not resize
if(src.width <= width && height == 0) {
width = src.width;
height = src.height;
}
// resize
if( src.width > width && height == 0){
height = src.height * (width / src.width);
}
// check scale
var xscale = width / src.width;
var yscale = height / src.height;
var scale = crop ? Math.min(xscale, yscale) : Math.max(xscale, yscale);
// create empty canvas
var canvas = document.createElement("canvas");
canvas.width = width ? width : Math.round(src.width * scale);
canvas.height = height ? height : Math.round(src.height * scale);
canvas.getContext("2d").scale(scale,scale);
// crop it top center
canvas.getContext("2d").drawImage(src, ((src.width * scale) - canvas.width) * -.5 , ((src.height * scale) - canvas.height) * -.5 );
return canvas;
}
function createObjectURL(i){
var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
return URL.createObjectURL(i);
}
小菜一碟;)
答案 1 :(得分:6)
EDIT(2014): 此答案现已过时! JavaScript是一种编程语言,其实现受到深刻影响 通过哪些浏览器资源可供他们使用。三 几年前这篇文章发表时(2011年7月),浏览器没有任何内容 一种可靠的功能,可以让OP做他所做的事情 要求,因此我的回答。
如果您现在仍然对如何做到这一点感兴趣,请参阅已经出现的这个问题的许多答案 同时在SO上。但请不要做任何事情 对这个答案的进一步评论,因为它显然毫无意义。谢谢。
简单地说,JavaScript并不意味着要做你想要的。无论您遇到哪种服务都可以操作选定的图像,您可以在提供任何其他功能之前将图像完全上传到服务器上。
答案 2 :(得分:3)
您可以使用HTML5 Canvas裁剪它们:
http://www.html5canvastutorials.com/tutorials/html5-canvas-image-crop/
答案 3 :(得分:2)
现代浏览器现在通过jquery和html5 canvas支持大量图像处理。可用于实现此目的的工具包括:
Resize & Crop for Jquery (ClientSide)
Pixastic Image Processing Library
HTML5 Canvas Image Optimization
我希望这对于寻找类似解决方案的人来说非常有用......