Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fabric.js动态裁剪区域对图像和SVG/形状的影响不同

Fabric.js动态裁剪区域对图像和SVG/形状的影响不同
EN

Stack Overflow用户
提问于 2016-01-26 19:53:05
回答 1查看 1K关注 0票数 1

我有一个Fabric.js画布,它允许基于对象占用的区域进行动态裁剪。然而,裁剪区域对待SVG/形状的方式与图像不同,使得它们略有偏移,并“突破”裁剪区域。重新创造:

  1. 转到https://jsfiddle.net/mikewagz/hncqbhah/
  2. 拖动徽标到裁剪区域的边界-这个剪辑正确,被裁剪到它的中心占据的任何区域,而不打破边界。
  3. 现在抓取一个形状并将其拖到裁剪区域。你可以在边界下看到一小部分。
  4. 缩放形状会加剧问题,显示裁剪区域下像素数量的增加。请注意,它还在顶部和左侧的相同方向上偏移了裁剪区域。

如何才能纠正这种情况?任何帮助都是非常感谢的,谢谢!

裁剪功能代码:

代码语言:javascript
运行
AI代码解释
复制
var clipByName = function (ctx) {
  this.setCoords();
  var clipObj = findByClipName(this.clipName);
  var scaleXTo1 = (1 / this.scaleX);
  var scaleYTo1 = (1 / this.scaleY);
  ctx.save();

  var ctxLeft = -( this.width / 2 ) + clipObj.strokeWidth;
  var ctxTop = -( this.height / 2 ) + clipObj.strokeWidth;
  var ctxWidth = clipObj.width - clipObj.strokeWidth;
  var ctxHeight = clipObj.height - clipObj.strokeWidth;

  ctx.translate( ctxLeft, ctxTop );
  ctx.scale(scaleXTo1, scaleYTo1);
  ctx.rotate(degToRad(this.angle * -1));

  ctx.beginPath();

  var isPolygon = clipObj instanceof fabric.Polygon;
  // polygon cliping area
  if(isPolygon)
  {
      // prepare points of polygon
      var points = [];
      for(i in clipObj.points)
          points.push({
              x: (clipObj.left + clipObj.width / 2) + clipObj.points[i].x - this.oCoords.tl.x,
              y: (clipObj.top + clipObj.height / 2) + clipObj.points[i].y - this.oCoords.tl.y
          });

      ctx.moveTo(points[0].x, points[0].y);
      for(i=1; i<points.length; ++i)
      {
        ctx.lineTo(points[i].x, points[i].y);
      }
      ctx.lineTo(points[0].x, points[0].y);
  }
  // rectangle cliping area
  else
  {
      ctx.rect(
          clipObj.left - this.oCoords.tl.x,
          clipObj.top - this.oCoords.tl.y,
          clipObj.width,
          clipObj.height
    );
  }

  ctx.closePath();

  ctx.restore();

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 01:58:08

您应该指定当路径被缩放时会发生这种情况。偏移量来自于strokeWidth在计算ctxLeft和ctxTop时的使用。

这是一个更简单的clipByName函数,它不需要做大量的数学运算就可以绘制裁剪区域,并消除调用.setCoords()和使用.oCoords的需要。

https://jsfiddle.net/hncqbhah/2/

代码语言:javascript
运行
AI代码解释
复制
var clipByName = function (ctx) {

var clipObj = findByClipName(this.clipName);

ctx.save();
ctx.setTransform(1,0,0,1,0,0);

ctx.beginPath();

var isPolygon = clipObj instanceof fabric.Polygon;
// polygon cliping area
if(isPolygon)
{
    // prepare points of polygon
    var points = [];
    for(i in clipObj.points)
        points.push({
            x: (clipObj.left + clipObj.width / 2) + clipObj.points[i].x ,
            y: (clipObj.top + clipObj.height / 2) + clipObj.points[i].y
        });

    ctx.moveTo(points[0].x, points[0].y);
    for(i=1; i<points.length; ++i)
    {
        ctx.lineTo(points[i].x, points[i].y);
    }
    ctx.lineTo(points[0].x, points[0].y);
}
// rectangle cliping area
else
{
    ctx.rect(
        clipObj.left,
        clipObj.top,
        clipObj.width,
        clipObj.height
    );
}

ctx.closePath();

ctx.restore();

}

另外,要绑定clipTo函数,不需要io loDash:

代码语言:javascript
运行
AI代码解释
复制
  obj.set({
    clipName: 'clip2',
    clipTo: clipByName
  }

这就够了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35028570

复制
相关文章
利用 clip-path 实现动态区域裁剪
CodePen Demo -- Material Design Menu By Bennett Feely
Sb_Coco
2021/12/17
1K0
利用 clip-path 实现动态区域裁剪
图片处理不用愁,给你十个小帮手
本文阿宝哥会为小伙伴们隆重介绍用于图片处理的十个 “小帮手”,他们各个身怀绝技,拥有模糊、压缩、裁剪、旋转、合成、比对等技能。相信认识他们之后,你将能够轻松应对大多数的图片处理场景。
阿宝哥
2020/06/23
5.2K0
小智周末学习发现了 10 个好用JavaScript图像处理库
用 JavaScript 处理图像可能非常困难且繁琐。 幸运的是,有许多库可以让这些变得简单得多。 下面介绍一些图像处理的库。
前端小智@大迁世界
2020/06/18
2.4K0
小智周末学习发现了 10 个好用JavaScript图像处理库
SVG 形状写法示例
线 <line x1="10" x2="50" y1="110" y2="150"/> 折线 <polyline points="60 110, 65 120, 70 115, 75 130, 80 125, 85 140, 90 135, 95 150, 100 145"/> 矩形 在座标为 (10,20) 的地方画一个宽 30,高 15 的矩形。 <svg> <rect x="10" y="20" width="30" height="15"/> </svg> 背景色红色的矩形。 <svg> <
前端GoGoGo
2018/08/24
9990
使用Word将图片裁剪成各种不同形状,如圆形。
1、点击[插入] 2、点击[形状] 3、点击[椭圆] 4、点击[文本] 5、按<Shift>键 6、点击[格式] 7、点击[形状填充] 8、点击[图片] 9、点击[来自文件] 10、点击[早餐优惠券图片] 11、点击[1.jpg] 12、点击[插入]
裴来凡
2022/05/28
1.9K0
使用Word将图片裁剪成各种不同形状,如圆形。
NumPy中的广播:对不同形状的数组进行操作
NumPy是用于Python的科学计算库。它是数据科学领域中许多其他库(例如Pandas)的基础。
deephub
2021/01/12
3.2K0
NumPy中的广播:对不同形状的数组进行操作
探索不同学习率对训练精度和Loss的影响
在探索mnist数据集过程中,学习率的不同,对我们的实验结果,各种参数数值的改变有何变化,有何不同。
算法与编程之美
2023/08/22
4190
探索不同学习率对训练精度和Loss的影响
图像裁剪
PNG (460, 460) RGB {'srgb': 0, 'gamma': 0.45455, 'dpi': (96, 96)} None
裴来凡
2022/05/29
1.7K0
图像裁剪
不同的batch_size对训练集和验证集的影响
我们知道,不同的batch_size对我们的训练集和验证集得出结果的精度和loss都会产生影响,是设置batch_size越大我们得到的精度越好,loss越好。还是batch_size越小我们得到的精度越好,loss越好呢?
算法与编程之美
2023/08/22
6160
不同的batch_size对训练集和验证集的影响
基于Matlab的对图像的形状进行识别及定位。
1、点击[命令行窗口] 2、按<Enter>键 3、点击[命令行窗口] 4、按<Enter>键
裴来凡
2022/05/28
1K0
基于Matlab的对图像的形状进行识别及定位。
强烈推荐!汇总了几个前端离不开的2D图形库
在现代前端开发中,无论是构建游戏、数据可视化还是动画效果,合适的2D图形库可以增加用户的趣味性,接下来就给大家介绍几个常用的2D图形库
程序员老鱼
2023/08/10
1.6K0
强烈推荐!汇总了几个前端离不开的2D图形库
不同类型公司对个人发展的影响
两年高校教师,十年程序员,五年技术社群运营。曾就职于清华同方,AIG,CA,SUN,Oracle,CSDN等公司。目前医疗美容领域创业中。
叶锦鲤
2019/05/08
9960
不同类型公司对个人发展的影响
云计算对不同行业的影响
云计算基础设施营造了一个有利于在更短的时间内开发灵活的应用程序和市场产品的运营环境,同时关注客户的动态需求和市场趋势。云计算使各行业能够应对的一个关键事件是新冠疫情带来的各种挑战,例如网络安全、自动扩展、质量控制和大数据。
静一
2022/02/28
2.1K0
图像随机裁剪
算法:图像随机裁剪是从1张图像随机裁剪200张图像,裁剪出图像的大小为 60x60,IoU大于等于th=0.5的裁剪框用红色标出,其它裁剪框用蓝色标出,IoU比对原始区域用绿框标出。
裴来凡
2022/05/29
1.6K0
图像随机裁剪
图像任意裁剪
算法:图像任意裁剪是将图像裁剪成若干任意大小图像。 文献:LHL, 李红林. (2011). 基于投影法实现矩形窗口的任意曲线裁剪 random clipping of curves in rectangular windows based on the projection method. 云南民族大学学报:自然科学版, 20(2). Kurtz, B. D. , & Claiborne, S. J. . (1999). Efficient method for clipping numerous objects against an arbitrary clipping path. US. 链接:https://www.gaitubao.com/
裴来凡
2022/05/29
2.2K0
图像任意裁剪
不同规则的中文分词对Lucene索引的影响
                                                                                                                             田春峰 欢迎订阅作者微博
田春峰-JCJC错别字检测
2019/02/14
8350
不同规则的中文分词对Lucene索引的影响
基于肤色的图像过滤和形状重签名。
face_recog.m % Orjinal fotografi okuyup, ekranda gosteriyoruz. fotograf = imread('C:\Users\xpp\Desktop\FaceRecognition-master\1.jpg'); figure; imshow(fotograf); % Fotograf RGB ise if kosulu icine giriyor. if(size(fotograf, 3) > 1) % Fotografimiz uze
裴来凡
2022/05/28
4870
基于肤色的图像过滤和形状重签名。
Verilog 不同编码风格对实际综合电路的影响
Verilog是一种硬件描述语言(HDL),用于设计数字电路和系统。统一、良好的代码编写风格,可以提高代码的可维护性和可读性。
单片机点灯小能手
2023/09/23
2930
Verilog 不同编码风格对实际综合电路的影响
点击加载更多

相似问题

外部裁剪掩模形状的裁剪图像- fabric.js

11

Fabric.js -带矩形的动态裁剪区域

13

对区域形状贴图的影响

10

基于svg的Fabric.js多重裁剪

10

裁剪不同形状的Javascript图像

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档