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

Posted

技术标签:

【中文标题】在客户端裁剪和调整图像大小【英文标题】:Crop and resize image on clientside 【发布时间】:2010-07-15 19:23:51 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

你可以使用 html5 Canvas,不需要使用插件之类的。

加载图像,更改画布大小并绘制图像。也可以将结果提取为 dataUrl。

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body  margin: 0px; padding: 0px; 
    </style>
  </head>
  <body>
    <canvas id="myCanvas"  ></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/

【讨论】:

【参考方案2】:

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

【讨论】:

所以flash允许直接在用户机器上编辑图像?如果是真的,那就太感谢了。我会调查的。 :)【参考方案3】:

这也可以使用 jQuery、MooTools、Prototype 和 script.aculo.us 等 javascript 库来完成:

http://www.bitrepository.com/image-cropping-with-jquery-mootools-prototype-scriptaculous.html

【讨论】:

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

如果您正在寻找 javascript 的图像裁剪器,请查看:https://github.com/supnate/icropper。它提供了裁剪的用户界面,但不是真正裁剪图像。

【讨论】:

以上是关于在客户端裁剪和调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章

发送到服务器之前的图像裁剪/调整大小

容器内的动态图像大小调整和裁剪

如何在以下代码中停止调整大小和裁剪?

PHP:图像调整大小和裁剪为纵向

PHP图像调整大小和裁剪功能

在 UITableViewCells 中显示之前调整图像大小和裁剪图像