使用 JCrop 裁剪绘制到画布中的图像

2024-03-25

我是 HTML5 新手,正在尝试使用 JCrop 裁剪图像。如果我想直接裁剪它是没有问题的,但是当它被绘制到画布中时 JCrop 不起作用。

我认为原因可能是我正在创建一个图像变量,以便能够将其绘制到视口画布中并动态设置它的 Id 。所以 Jquery 无法访问动态创建的图像。但即便如此我也不知道该怎么办。

这是我的完整 HTML 代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        <title>acanimal - Crop image on the client side with JCrop and HTML5 canvas element</title>

        <script src="./js/jquery.min.js" type="text/javascript"></script>
        <script src="./js/jquery.Jcrop.min.js" type="text/javascript"></script>
        <link rel="stylesheet" href="./css/jquery.Jcrop.css" type="text/css" />

        <script type="text/javascript">

            $(window).load(function () {
                var canvas = document.getElementById('viewport'),
                context = canvas.getContext('2d');

                make_base();

                function make_base() {
                    var base_image = new Image();
                    base_image.id = 'target';
                    base_image.src = 'demo_files/sago.jpg';
                    base_image.onload = function () {
                        context.drawImage(base_image, 0, 0);
                    }
                }

            });

            jQuery(function ($) {

                $('#target').Jcrop({
                    onChange: updatePreview,
                    onSelect: updatePreview,
                    allowSelect: true,
                    allowMove: true,
                    allowResize: true,
                    aspectRatio: 0
                });

                function updatePreview(c) {
                    if (parseInt(c.w) > 0) {
                        // Show image preview
                        var imageObj = $("#target")[0];
                        var canvas = $("#preview")[0];
                        var context = canvas.getContext("2d");

                        if (imageObj != null && c.x != 0 && c.y != 0 && c.w != 0 && c.h != 0) {
                            context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0, canvas.width, canvas.height);
                        }
                    }
                };
            });

        </script>
    </head>
    <body>
        <canvas id="viewport" width=602; height=500;></canvas>
        <canvas id="preview" style="width:150px;height:150px;overflow:hidden;"></canvas>
    </body>
</html>  

我究竟做错了什么?

谢谢...


你已经设置好了Jcrop不正确,试试吧。

function make_base() {
  var base_image = new Image();
  base_image.src = 'https://picsum.photos/id/870/700/467';
  base_image.onload = function() {
    context.drawImage(base_image, 0, 0);
  }
}

function updatePreview(c) {
  if (parseInt(c.w) > 0) {
    // Show image preview
    var imageObj = $("#viewport")[0];
    var canvas = $("#preview")[0];
    var context = canvas.getContext("2d");

    if (imageObj != null && c.x != 0 && c.y != 0 && c.w != 0 && c.h != 0) {
      context.drawImage(imageObj, c.x, c.y, c.w, c.h, 0, 0, canvas.width, canvas.height);
    }
  }
}

var canvas = document.getElementById('viewport'),
  context = canvas.getContext('2d');

make_base();

$('#viewport').Jcrop({
  onChange: updatePreview,
  onSelect: updatePreview,
  allowSelect: true,
  allowMove: true,
  allowResize: true,
  aspectRatio: 0
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/tapmodo/[email protected] /cdn-cgi/l/email-protection/js/jquery.Jcrop.min.js"></script>
<link href="https://cdn.jsdelivr.net/gh/tapmodo/[email protected] /cdn-cgi/l/email-protection/css/jquery.Jcrop.min.css" rel="stylesheet" />

<canvas id="viewport" width="602" height="500"></canvas>
<canvas id="preview" style="width:150px;height:150px;overflow:hidden;"></canvas>

在 JSFiddle 上查看 http://jsfiddle.net/wr2er0Lj/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JCrop 裁剪绘制到画布中的图像 的相关文章

  • 绝对定位的最小高度

    我的页面 topLeft 上有一个区域设置了最小高度 在 topLeft 中 我有一个 heroBanners 部分 我希望将其锚定到 topLeft 的底部 使用position absolute 底部 0 起初 这工作正常 但是当 to
  • HTML5 什么是 itemscope 属性?用外行人的话来说它有什么作用?

    我只是想知道 HTML5 itemscope 属性的基本用途是什么 The itemscope attribute 是一个布尔属性 用于定义元素中包含的元数据的范围 它定义在HTML5 微数据 http www w3 org TR micr
  • jQuery 创建并追加多个元素

    我创建了 2 个 div Div1 冻结 Div2 父级 然后又创建了 3 个 div 加载 标题 消息 将其附加到 Div2 父级 整个 div 进入 body 标签 下面是我的代码 我认为还有其他一些最好的方法来实现这一点 var fr
  • 滚动播放 Html5 视频

    我正在一个 WordPress 网站上工作 下面的代码可以按照我想要的方式工作 只播放一次 最后出现 重播 按钮 我希望它在滚动到 ie 时开始播放 在视口中 我在这里看到了几种不同的方法来实现这一点 但我无法让它们与我当前的代码很好地配合
  • 在 jQuery 中将一列的内容复制到另一列

    下面的 jQuery 非常慢 约 7 秒 我显然做错了 我正在尝试复制列的内容col到专栏0在 HTML 表格中 所以如果 col 是 2 那么我需要将第 2 列复制到第 0 列 for var i 0 i lt 31 i grid tr
  • window.location 的 .NET MVC jQuery 相对路径

    我有一个非常简单的问题 但似乎无法弄清楚 由于 MVC 构建 URL 的方式 它包括所有路由信息 以下内容不起作用 我希望路径名仅返回虚拟目录路径 我所做的只是当用户从下拉列表中选择 ID 时重定向到不同的路由 document ready
  • 如何检查 JQuery select 中是否已存在选项

    如何检查 JQuery 的 select 中是否已存在选项 我想动态地将选项添加到 select 中 因此我需要检查该选项是否已经存在以防止重复 如果它已经存在 则评估结果为 true yourSelect option value you
  • 禁用浏览器状态栏文本

    背景 现代浏览器取消了经典的状态栏 而是在窗口底部绘制一个小工具提示 在悬停 焦点时显示链接目标 下面的屏幕截图说明了这种行为的示例 在我的例子中是不需要的 问题 有没有一种可移植的方法来禁用这些工具提示 在我的特殊情况下 我是否遗漏了这样
  • Html 5 音频标签自定义控件?

    我觉得我在这里服用了疯狂的药丸 因为我不知道如何使用自定义控件渲染 html 5 音频标签 到目前为止我有这个 html 它工作没有问题
  • 在当前元素的 onchange 上发送 $(this)

    我有这个html
  • 在一段时间内切换(或闪烁)表中的特定单元格

    我已经在 Html 中创建了一个表格 我想让一个特定的单元格闪烁 打开和关闭 您能否让我知道是否可以使用 javascript h4 Two rows and three columns h4 table border 1 width 10
  • Jquery 移动弹出窗口在页面调整大小或滚动时在错误位置重新打开

    在 PC 浏览器中 存在弹出窗口在调整窗口大小时改变其位置的问题 我用谷歌搜索了一下 发现 JMF 有一个错误 将positionTo从origin codeSource更改为window 在移动浏览器中 我在页面滚动上遇到同样的问题 弹出
  • Angular:将数据从工厂 ajax 调用传递回我的控制器

    我一直在使用 Angular 并且已经从使用本地数据 似乎工作正常 转向尝试通过工厂中的 ajax 调用来填充我的视图 这是代码 div h2 Get data using a Factory h2 div div div
  • 使用 BeautifulSoup 在 python 中抓取多个页面

    我已经设法编写代码来从第一页中抓取数据 现在我不得不在这段代码中编写一个循环来抓取接下来的 n 页 下面是代码 如果有人可以指导 帮助我编写从剩余页面中抓取数据的代码 我将不胜感激 Thanks from bs4 import Beauti
  • 如何通过 JavaScript 函数在 HTML5 画布上绘制多边形

    我希望用户能够单击画布上的某个位置 多边形就会出现在上面 div class rounded div
  • 通过 AJAX 加载 Google Maps API,控制台错误

    我正在使用 jquery javascript ajax 和 php 构建一个完全动态的网站 当我单击导航链接时 浏览器会使用 ajax 打开该页面 所以基本上所有页面都加载在同一个index php 中 如果我转到 位置 选项卡 其中有谷
  • 如何对列表进行垂直排序?

    我在下面使用这个HTML and CSS对列表进行排序的代码vertical 输出是horizontal sorted 我的示例代码
  • 尝试访问本地主机时如何避免跨源策略错误?

    我想要在外部服务器上上传一个静态网站 该网站将尝试从中获取 JSON 数据localhost 3000 服务器程序已在用户计算机上运行 我正在尝试使用 jQuery 来做到这一点 如下所示 getJSON http localhost 30
  • 如何获取引导程序轮播中当前“活动”图像的 src

    我想在每次更改时将活动图像的 src 拉到引导程序轮播中 下面是我现在所拥有的 适用于第一张图像 但在下一张图像触发时不会改变 document ready function galleryCarousel on slide bs caro
  • jQuery qTip:如何将单个工具提示 div 附加到多个目标 div?

    jQuery 的正常行为qTip http craigsworks com projects qtip 插件的作用是为分配的每个工具提示项创建一个新的隐藏 div 有没有办法将单个隐藏的工具提示元素绑定到多个目标 以避免混乱 DOM 人为的

随机推荐

  • “范围的坐标或尺寸无效”

    我正在开发一个与 REST API 链接并将数据放入 Google 表格的 Google Apps 脚本 我已经成功完成一次此操作 但是在访问一些不同的数据时 我收到错误消息 范围的坐标或尺寸无效 当它们在我的其他脚本上完美运行时 访问的所
  • 假设不变的 ASCII 编码,用 Rubyist 方法解码该编码字符串

    我的程序是二进制协议的解码器 该二进制协议中的字段之一是编码的String 中的每个角色String是可打印的 并且代表一个整数值 根据我正在解码的协议的规范 它表示的整数值取自下表 其中列出了所有可能的字符 Character Value
  • 依赖项的 Maven 项目变量

    我有一个加载小程序的 html 文件 html需要通过名称引用jar 并且由于maven根据artifactid 版本等对其进行命名 因此html需要随着项目的发展动态更新 似乎资源过滤是可行的方法 但我无法弄清楚要插入的变量应该是什么样子
  • jQuery 动画小数递增/递减

    我想一步一步地动画两个十进制数之间的差异 已经发现乔斯 克劳克罗夫特的解决方案 http www josscrowcroft com 2011 code jquery animate increment decrement numeric
  • 数据类中的属性

    描述 我正在尝试实现一个仅包含几个参数的简单数据类 dataclass class ReconstructionParameters img size int CR int denoise bool epochs int learning
  • 如何以可跨 Linux、Windows 和 MacOS 移植的方式收集 Python 3 中的当前架构?

    我正在尝试找到一种可移植的方式来收集当前的架构 例如x86 64 or AArch64 我将用它来填充一个标志 例如is x86 使用Python 3 它看起来像import platform platform machine 函数是正确的
  • 获取 CPU、RAM 和 GPU 信息 - UWP 应用

    是否可以在 UWP 应用程序中获取计算机的 CPU GPU 和 RAM 信息 E 在文本块中显示此信息 我想知道处理器型号 例如 Intel Core i7 xxxx 和总 RAM 我想知道处理器型号 例如 Intel Core i7 xx
  • 启发式参与者永无休止的定期恢复

    几天来我们的日志里一直充斥着这样的消息 2018 06 15 12 19 23 WARN com arjuna ats arjuna Periodic Recovery Transaction 0 ffff0a983f1e 1f3aa2ff
  • IE10 上的 WebSocket 出现 SecurityError

    我目前正在 IE10 在 Windows 8 上 下开发一个网站 使用 JavaScript 中的 WebSockets 它在 Firefox 18 和 Chrome 25 下运行良好 但在 IE10 上建立连接时出现 SecurityEr
  • 如何解决android中的OutOfMemoryError?

    我已经准备了可绘制动画的数量 当应用程序启动时 第一个动画将启动 我有两个按钮 下一个和上一个 具有相同的活动 当我单击下一个按钮时 我遇到了异常 例如 java lang OutOfMemoryError bitmap size exce
  • java中基于表单的身份验证的混乱

    谁能告诉我 我该如何处理j 安全检查java中基于表单的身份验证中的servlet 我是否必须映射 servlet 类j 安全检查web xml 文件中的名称 例如
  • 我如何在 Swift 中投射 @Binding

    很快我就可以用 Int doubleVariable 将 Int 转换为 Double 但是如何将 Binding 转换为 Binding 呢 然后我可以将 Binding var intVar Int 传递给需要 Double 绑定的函数
  • Python 正则表达式模块即使重叠 = True 也找不到所有匹配项

    我正在使用 PyPy正则表达式模块 https pypi org project regex 具有重叠匹配支持 我有以下代码 其中有一个字符串 A 我正在使用正则表达式查找在正则表达式中定义的 DNA 模式 我想找到与我的 RE 的所有匹配
  • RxJs 将流拆分为多个流

    如何根据分组方法将永无止境的流拆分为多个结束的流 a a a a a b b b b c c c c d d d e gt 到这些可观察到的 a a a a a b b b b c c c c d d d e gt 如您所见 a是在开始的时
  • 初始化 selenium webdriver 时如何修复 python-selenium 错误“连接被拒绝”?

    我正在非公共网页上运行非常复杂的 python selenium 测试 在大多数情况下 这些测试运行良好 但有时这些测试之一在 Webdriver 本身的初始化期间会失败 提示 当尝试初始化网络驱动程序时 即执行以下操作时 会发生此错误 S
  • 通过(sails js)水线将值推入mongodb数据库数组

    节点js 帆js 水线 插入后我需要将值更新 或推送 到以下架构中 我将 sailsjs 与 Waterline 和 mongodb 一起使用 countries states statename state districts distn
  • 在 ReleaseMutex 之前 CloseHandle 互斥锁 - 会发生什么?

    如果我在线程完成互斥体之前对互斥体调用 CloseHandle 因此尚未调用 ReleaseMutex 那么预期的行为是什么 CloseHandle 立即销毁传递给它的句柄 ReleaseMutex 然后会失败ERROR INVALID H
  • Kafka新生产者超时

    我正在使用新的 kafka 生产者客户端并将 timeout ms 属性设置为 50 毫秒 这是生产者中使用的完整配置 props put acks 1 props put buffer memory 33554432 props put
  • WCF中不使用CallBack将数据推送到客户端

    是否可以在 WCF 服务中将数据推送到客户端而不使用回调 设想 有 2 个客户端使用服务 客户端1发送消息 然后客户端2收到客户端1发送的消息 解决这个问题有几种方法 Use 发布 订阅框架 http msdn microsoft com
  • 使用 JCrop 裁剪绘制到画布中的图像

    我是 HTML5 新手 正在尝试使用 JCrop 裁剪图像 如果我想直接裁剪它是没有问题的 但是当它被绘制到画布中时 JCrop 不起作用 我认为原因可能是我正在创建一个图像变量 以便能够将其绘制到视口画布中并动态设置它的 Id 所以 Jq