在客户端裁剪和调整图像大小

3

是否有可能在客户端PC上使用由客户选择的图像而无需将图像上传到服务器。

如果是,哪种Web编程语言可以做到这一点?

4个回答

7
你可以使用HTML5 Canvas,无需使用插件或其他软件。
加载图像,更改画布大小并绘制图像。还可以将结果提取为dataUrl。
<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body { margin: 0px; padding: 0px; }
    </style>
  </head>
  <body>
    <canvas id="myCanvas" width="578" height="200"></canvas>
    <script>
      var canvas = document.getElementById('myCanvas');
      var context = canvas.getContext('2d');
      var imageObj = new Image();

      imageObj.onload = function() {
        // draw cropped image
        var sourceX = 150;
        var sourceY = 0;
        var sourceWidth = 150;
        var sourceHeight = 150;
        var destWidth = sourceWidth;
        var destHeight = sourceHeight;
        var destX = canvas.width / 2 - destWidth / 2;
        var destY = canvas.height / 2 - destHeight / 2;

        context.drawImage(imageObj, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
      };
      imageObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
    </script>
  </body>
</html>

所有信用归属于:

http://www.html5canvastutorials.com/tutorials/html5-canvas-image-crop/


1

1
据我所知,虽然裁剪是通过客户端 UI 安排的,但图像必须先上传到服务器。JS 只是将坐标发送到服务器,服务器进行裁剪和缩放。因此,这不符合问题的要求,因为图像必须先上传。 - Cole
2
实际上,如果您使用HTML5,您可以直接在浏览器中操作原始像素数据。例如,请参见:https://developer.mozilla.org/En/HTML/Canvas/Pixel_manipulation_with_canvas - Andrew B.
@Cole 你可以使用JavaScript访问本地文件。例如:使用HTML5读取文件,http://www.html5rocks.com/tutorials/file/dndfiles/#toc-reading-files,或在本地运行您的JavaScript,就像TiddlyWiki一样 http://www.tiddlywiki.com/。 - Andrew B.
好的,一旦所有浏览器都支持Canvas和HTML5就可以实现,但是你链接页面上的项目并不是以那种方式工作。我使用imgAreaSelect构建了一个图像上传系统。实际的缩放是通过服务器端的gd/imagemagick处理的。 - Cole
@Cole 只是一些小细节,但任何支持HTML5画布的浏览器都可以实现,目前包括最新版本的Firefox、Safari和Chrome。此外,如果从本地计算机加载页面,则仍然可以操作图像数据,尽管不能真正进行裁剪/调整大小。 - Andrew B.

0
这只能通过 FlashSilverlight 或者一个自定义的 Plugin/ActiveX 来完成,具体取决于目标浏览器。

那么Flash允许在用户机器上直接编辑图像吗? 如果是真的,那么非常感谢。我会研究一下的。 :) - Somebody

0
如果你正在寻找一款基于JavaScript的图片裁剪工具,可以看看这个:https://github.com/supnate/icropper。它提供了用户界面来进行裁剪,但并不是真正的裁剪图片。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接