- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个很长的项目:一个在浏览器中运行并使用 SVG 和 Javascript 的基本矢量图形工具(也许你已经在其他地方看到过这些)。该工具只有非常有限的一组功能,因为受众受到限制并且目的非常具体,实际上除了明确允许的功能(你知道)之外,不允许有其他功能。一个遗漏的特征是侵 eclipse (也称为插入或细化)和扩张(开始、加厚、加粗)多边形和其他图形元素。
我已经多次使用 Adobe Illustrator 的 Offset Path Effect,有了它,我可以轻松制作变薄或变厚的图形对象的副本,而不会影响原始对象,因此几乎可以是程序支持的任何对象。
我试图获得相同的功能以在 SVG 中运行,但没有成功。
我尝试了以下方法:
- 扩张和侵 eclipse 过滤器,但结果不令人满意(please see the image here)
- 服务器端 Python 的 Shapely 库,但这种解决方法太慢并且只允许插入或开始基本多边形(description here)
- 找到javascript库/代码/函数,可以改变图形元素的路径数据,但没有找到javascript
那么有没有什么有意义的方法来实现这个,比如偏移路径效果以及如何实现?
最佳答案
这是一个“回答你自己的问题——share your knowledge, Q&A-style”式的答案,但如果你有更好的答案,请随意使用你的键盘。
我只使用了几天,所以请不要低估我的差距。我得到了一个有趣的 workaround idea这个问题是基于可变宽度的笔触和蒙版。
但让我们从你(或我)的第一个想法开始。当我们要在 SVG 中侵 eclipse (细化)图形对象时,显而易见的第一个想法是使用侵 eclipse 过滤器:
但是因为侵 eclipse 过滤器(以及扩张)uses pixel data (the rasterized path)结果在所有情况下都不好看。事实上,我从来没有见过一个漂亮的腐 eclipse 用于过滤矢量对象。看帽子和嘴巴:
dilate 过滤器也有类似的问题( Nose 不好看,棒球帽很乱,还有一些其他的不一致):
Adobe Illustrator 的所有用户都知道漂亮的路径效果,可用于将各种路径操作应用于形状(对象)。这些效果不会更改原始路径数据,它们只会创建对象的修改副本。最有用的方法之一是 Offset Path Effect ,可用于从选定对象开始指定距离(或类似距离)。 SVG:s erode 和 dilate 过滤器与 Illustrator 的 Offset Path Effect 有相似之处,但质量作为矢量操作(相对于位图)高。
当前状态下的 SVG 格式缺乏对类似 Illustrator 的偏移路径的支持,但可以使用可变宽度的笔触和 mask 获得相同的功能,如 here .
让我们深入了解 SVG 蒙版的世界。扩张(或起始路径或加厚)可以通过简单地增加笔画宽度来实现,但侵 eclipse (或插入路径或细化)需要更多的东西,例如 mask 。在 SVG 中,任何图形对象或 'g' 元素都可以用作将当前对象合成到背景中的 alpha 掩码 ( W3C SVG 1.1 Recommendation )。
以上意味着不仅对象的填充可以用作蒙版,还可以用作笔触。 并调整用作 mask 的路径的笔触宽度,我们可以控制当前对象(使用 mask 属性应用 mask 的对象)被遮蔽的程度 .
让我们举一个使用掩码的例子。首先我们在 SVG:s defs 元素中定义一个路径:
<defs>
<path id="head_path" d="M133.833,139.777c1 ...clip... 139.777z"/>
</defs>
当我们在 defs 元素中定义路径时,它消除了在文档的其他部分重复相同数据的需要。路径的 id 属性用于引用来自文档某些点的路径。
<defs>
...
<mask id="myMask" maskUnits="userSpaceOnUse">
<use xlink:href="#head_path" fill="#FFFFFF" stroke="#000000"
stroke-width="18" stroke-linecap="round" stroke-linejoin="round"/>
</mask>
...
</defs>
'use' 元素引用了 'path' 元素,其 id 是 'head_path' 并指示该掩码中包含了 'head_path' 元素的图形内容(在这种情况下只有路径数据)。
在上述 'use' 元素上定义的笔画宽度将是偏移(侵 eclipse )效果的量 .这个数量被屏蔽在元素之外,以防万一,我们接下来要绘制。
...
</defs>
<use x="5" y="5" xlink:href="#head_path" fill="#4477FF" stroke="black"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
这会产生以下形状:
...
</defs>
<use x="5" y="5" xlink:href="#head_path" fill="#22EE22" stroke="black"
stroke-width="21" stroke-linecap="round" stroke-linejoin="round"
mask="url(#myMask)"/>
上面的 'use' 元素被指示使用 'myMask' 作为掩码,使用 'head_path' 作为图形内容。 mask 效果应用于 'use' 元素并绘制以下形状:
<!-- To get the black stroke -->
<use x="220" y="5" xlink:href="#head_path" fill="red" stroke="black"
stroke-width="24" stroke-linecap="round" stroke-linejoin="round"/>
<!-- To get the boldened shape -->
<use x="220" y="5" xlink:href="#head_path" fill="red" stroke="red"
stroke-width="21" stroke-linecap="round" stroke-linejoin="round"/>
这会产生以下形状:
关于javascript - 如何在不使用 Javascript 或膨胀/腐 eclipse 过滤器的情况下在 SVG 中实现偏移路径效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723832/
我有一个对象数组,我想在键传入“filter”过滤器时提取值。下面是我尝试过的 Controller 代码片段,但我得到的响应类型未定义。请帮我找出哪里出错了。 var states = [{"HI
如果任何 J2EE 应用程序直接访问 servlet,然后 servlet 将相同的请求转发到某个 .jsp 页面。 request.getRequestDispatcher("Login.jsp")
我有一个带有图像缩略图的表单,可以通过复选框进行选择以进行下载。我想要一个包含 jQuery 中图像的数组,用于 Ajax 调用。 2个问题: - 表格顶部有一个复选框,用于切换我想要从映射中排除的所
我必须从服务器转储数据库,将 .sql 传输到另一台服务器,然后运行以下脚本以使用此语法删除某些行: DELETE wp_posts FROM wp_posts INNER JOIN wp_postm
我想从目录中过滤掉特定类型的文件,但收到错误“ token 语法错误,删除这些 token ”: File dir = new File("c:/etc/etc"); File[] f
几乎所有的 Web 应用程序都依赖外部的输入。这些数据通常来自用户或其他应用程序(比如 web 服务)。通过使用过滤器,您能够确保应用程序获得正确的输入类型。 您应该始终对外部数据进行过滤! 输
我正在开发一个由 OData 服务提供支持的搜索功能。它将返回一个或一列标题对象作为结果。我们需要搜索的许多字段不在标题对象中。它们仅在子对象(导航属性)中。能够针对子字段执行 OData 搜索并仍然
假设我有以下模型,它有一个方法 variants(): class Example(models.Model): text = models.CharField(max_length=255)
我有一个默认的列表列表,但我基本上想这样做: myDefaultDict = filter(lambda k: len(k)>1, myDefaultDict) 除了它似乎只适用于列表。我能做什么?
我正在使用 django-filter 来输出我的模型的过滤结果。那里没有问题。下一步是添加一个分页器……尽管现在已经苦苦挣扎了好几天。 views.py: def funds_overview(re
我正在做一个概念证明,我正在试验一种奇怪的行为。 我有一个按日期字段按范围分区的表,如果我设置固定日期或由 SYSDATE 创建的日期,查询的成本会发生很大变化。 这些是解释计划: SQL> SELE
如果一个或另一个值匹配,是否可以制作一个过滤器,例如一个中性的 PropertyFilter(并传递给链中的下一个过滤器)?就像是: value1 val
我是 VBA 初学者,正在尝试根据单元格值过滤数据,经过一番谷歌搜索后,我编写了一个有效的代码 Sub FilterDepartment_Sales() Sheet6.Activate
假设我在 excel 数据透视表中有两个过滤器。 两者最初都会显示筛选列的选定范围内的所有值。 当我仅在过滤器 1 中选择几个值时,过滤器 2 仍会继续显示基础数据中所选范围内特定过滤器列中的所有值。
是否可以定义自定义 build-ins (名称不再适合)在 ftl? 由于语义前提,我不想让它成为一个函数,而是一个内置的。 最佳答案 这是不可能的,?语法是为内置函数保留的。 (顺便说一句,这意味着
我试图在 Edit | 之外添加一个链接通过插件删除wordpress管理员>用户>所有用户列表中的链接..这是我第一次尝试通过查看其他插件或搜索google来制作wordpress插件.. 我添加了
我正在尝试按照以下教程使用 django 过滤器进行分页,但该教程似乎缺少某些内容,而且我无法使用基于函数的 View 方法显示分页。 https://simpleisbetterthancomple
由于我是 Powershell 新手,因此寻求最佳实践方面的帮助, 我有一个 csv 文件,我想过滤掉 csv 中的每一行,除了包含“未安装”的行 然后,我想根据包含计算机列表的单独 csv 文件过滤
我正在尝试创建一个搜索查询,它会告诉我我作为审阅者添加到其中的打开更改,但我还没有提交最新补丁集的代码审查。这应该包括其他人已经评论过的更改,但我没有。 我能找到的最接近的是 is:reviewer
在我的 Web 应用程序中,我有 3 个主要部分 1. 客户 2. 供应商 3. 管理员 我正在使用 java session 过滤器来检查用户 session 并允许访问网站的特定部分。 因此客户只
我是一名优秀的程序员,十分优秀!