javascript - 仅使用接受 URL 作为输入的 JavaScript 裁剪照片

标签 javascript security image-processing client-side

有没有办法仅使用客户端 JavaScript 来裁剪照片?

当我尝试搜索这样的工具时,JavaScript 部分总是使用 DHTML 来简单地允许用户选择要裁剪图像的哪个区域,然后将该信息发送到服务器端脚本(例如 ASP、PHP)以实际执行裁剪。

我意识到 JavaScript 无法创建文件或请求它们,但我认为解决方法应该是可能的。就输入而言,我希望 JavaScript 文件接受图像的 URL。这很简单,您可以轻松创建一个 <image>元素来显示它。就输出而言,我希望得到 data URI解决方案。

Several solutions存在,但是,当我尝试使用它们( http://jsfiddle.net/sfjsfid/skm6V/1/ )时,我收到错误:

Uncaught Error: SECURITY_ERR: DOM Exception 18

发生这种情况的原因是 specification指出当您从与托管页面的域不同的域请求图像时,必须生成此错误。

是否有其他方法可以使用纯客户端 JavaScript 解决方案来裁剪来自不同域的图像?

如果我尝试使用数据 uri 而不是来自不同域 ( http://jsfiddle.net/VX2z2/ ) 的图像,它会正常工作。但是,为了能够使用图像的 URL 作为输入,我需要以某种方式将其转换为数据 URI。由于我已经讨论过的安全问题,使用 Canvas 是行不通的。即使我找到一个可以使用的 Web 服务,它也不会工作,因为那样我就会向外部域发送 Ajax 请求,这是浏览器阻止的另一个安全风险。

托管我自己的 Web 服务版本或托管服务器端代码不是一个选项。

还有其他想法吗?或者是接受数据 uri 作为输入的唯一选项?

最佳答案

如果您想打破安全模型,您需要执行 Web 应用程序以外的其他操作,例如 Firefox 扩展。这将为您提供额外的权限来发出请求,甚至保存图像。

关于javascript - 仅使用接受 URL 作为输入的 JavaScript 裁剪照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621516/

相关文章:

javascript - 如何找到body标签内光标的位置

javascript - 克隆右键单击的 div 元素

android - http-equiv Content-Security-Policy 在浏览器中有效,但在安卓设备上无效 - IONIC

jquery - 像 Facebook 一样的图像网格显示

linux - Imagemagick use-trimbox 根本不起作用

javascript - 使用延迟和何时

php - SSL Cookie 中缺少安全标志 (http-cookie-secure-flag)

Java EE JDBC 领域

c++ - 循环中的运行时 vector 错误

javascript - setTimeout() 不工作