Javascript裁剪图像客户端

时间:2011-07-27 16:45:05

标签: javascript jquery image-processing

我想在上传到服务器之前使用javascript或jQuery在客户端裁剪和压缩图像。

WorkFlow:

  1. 选择图片
  2. 将图像裁剪为特定尺寸
  3. 压缩裁剪
  4. 上传
  5. 以前有人这样做过吗?什么插件或我该怎么办?

    我看到facebook可以压缩图像并在上传前自动调整大小。

4 个答案:

答案 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)

答案 3 :(得分:2)

现代浏览器现在通过jquery和html5 canvas支持大量图像处理。可用于实现此目的的工具包括:

Resize & Crop for Jquery (ClientSide)

Pixastic Image Processing Library

HTML5 Canvas Image Optimization

我希望这对于寻找类似解决方案的人来说非常有用......