svg - 在线性渐变 X/Y 中包含笔画宽度
问题描述
我遇到了线性渐变的问题,当我将它添加到笔画时,它不会像作为填充应用时那样显示。我认为这是问题所在:objectBoundingBox,在本节的底部,它说:
当适用元素的几何形状没有宽度或没有高度时(例如水平或垂直线的情况),即使当由于具有非零笔划宽度而查看时线条具有实际厚度时,也不应使用关键字 objectBoundingBox边界框计算忽略笔画宽度。当适用元素的几何形状没有宽度或高度并且指定了 objectBoundingBox 时,将忽略给定的效果(例如,渐变或过滤器)。
我来给你展示:
这是带有填充的矩形的样子:
<svg name="scaled1box" overflow="visible" x="12.35" y="12.35" fill="url(#fillLinGrads0sp5)">
<defs>
<linearGradient id="fillLinGrads0sp5" x1="0" y1="0" x2="1" y2="1" >
<stop offset="0" stop-color="#7030A0" />
<stop offset="0.49" stop-color="#7030A0" />
<stop offset="0.5" stop-color="#FFFFFF" />
<stop offset="0.51" stop-color="#0070C0" />
<stop offset="1" stop-color="#0070C0" />
</linearGradient>
</defs>
<path d="M0,0L72,0L72,144L0,144Z" />
</svg>
但是用中风代替:
<svg name="scaled1box" overflow="visible" x="12.375" y="12.375" fill="none" stroke="url(#strokeLinGrads0sp5)" stroke-width="25" stroke-miterlimit="8">
<defs>
<linearGradient id="strokeLinGrads0sp5" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#7030A0" />
<stop offset="0.49" stop-color="#7030A0" />
<stop offset="0.5" stop-color="#FFFFFF" />
<stop offset="0.51" stop-color="#0070C0" />
<stop offset="1" stop-color="#0070C0" />
</linearGradient>
</defs>
<path d="M0,0L72,0L72,144L0,144Z" />
</svg>
请注意,在带有笔划的那个中,“45 度”角略微偏离。我相信这与边界框仅用于路径而不是路径+笔画宽度这一事实有关。
好的。怎么办?我仍然需要它用于路径+描边+宽度。
所以我尝试设置相对坐标,但无法弄清楚这是如何工作的。x2="1"
意思是我将 w=72,h=144 的矩形增加到 w=144,h=144 的正方形,并将“和”的端点设置为y2="1
它们相对于原始边界框的位置 - 所以x2="1.1736"
和y2="1.1736
“(1.1736 = 新的 w/h 为 169(笔划宽度为 144+25)除以旧的 w/h 为 144。)。没有骰子。然后我尝试偏移起点和终点以首先考虑转换,然后是比例。再次,没有骰子。
于是我就去找了。这看起来很有希望,直到我无法真正弄清楚他的变量,比如 eps 等。
所以,当所有其他方法都失败时,我只是试着摆弄数字。这似乎很接近。
<svg name="scaled1box" overflow="visible" x="12.375" y="12.375" fill="none" stroke="url(#strokeLinGrads0sp5)" stroke-width="25" stroke-miterlimit="8">
<defs>
<linearGradient id="strokeLinGrads0sp5" x1="-0.087" y1="-0.24" x2="1.17" y2="1.17">
<stop offset="0" stop-color="#7030A0" />
<stop offset="0.49" stop-color="#7030A0" />
<stop offset="0.5" stop-color="#FFFFFF" />
<stop offset="0.51" stop-color="#0070C0" />
<stop offset="1" stop-color="#0070C0" />
</linearGradient>
</defs>
<path d="M0,0L72,0L72,144L0,144Z" />
</svg>
但我不确定如何计算所有起点/终点。它真的只是在胡闹。
选项:
- 放弃并将笔画转换为路径。
- 从您那里获得一些帮助,以了解如何使用初始值转换相对或绝对点值以适应 BB + 笔划宽度。
解决方案
我在这里找到了一段很好的代码,可以帮助压缩像魅力一样的原始角度。
推荐阅读
- c# - 通过管道分割字符串的正则表达式跳过空字符串
- python - 在 Jupyter notebook 中使用提示执行 Python 命令
- c# - ListBox 中的 WPF 性能问题
- wordpress - WordPress 待审核
- c# - EF Core 自引用多对多
- python - KeyError 0 开启
- 标签
- mysql - 检测两个 MySQL 列中的重复项(分散在列中的唯一值)
- apache-spark - 如何使用 SparkSession 创建 emptyRDD -(因为不推荐使用 hivecontext)
- elasticsearch - 无法安装 search-guard -“错误:插件 zip 中缺少 `elasticsearch` 目录”
- react-native - 如何在不使用 base64 的情况下从 react-native 上传图片?