在客户端裁剪和调整图像大小
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】:这只能通过Flash
、Silverlight
或自定义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。它提供了裁剪的用户界面,但不是真正裁剪图像。
【讨论】:
以上是关于在客户端裁剪和调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章