【发布时间】:2018-11-14 14:36:33
【问题描述】:
我的问题
给定一个我知道多少像素 (px) 对应于一厘米 (cm) 的光栅图像和一个 SVG 路径,我在其中将用户空间单位定义为取决于浏览器宽度的视图框内的毫米:如何缩放图像,使其始终具有与 SVG 路径相同的每厘米像素比率?
背景
我有代表织物纹理的光栅图像,我想将这些图像与代表一件衣服的一部分的 svg 形状相匹配。我想将织物覆盖在形状上,因为它需要逼真的形状和图像的比例必须匹配。这一切都是动态完成的,这意味着我想为一般情况解决这个问题,而不仅仅是针对一个特定的图像和形状组合。
示例
我已经将我的通用代码和通用代码改编为这个特定的 JS Fiddle 来说明问题并显示我到目前为止的进度以及我遇到的问题: http://jsfiddle.net/nx3vrz94/16/
<svg id="svgView-1" style="width:90vw" viewBox="0 0 635 334" >
<path fill-opacity="1" fill="url(#fabric1001)" d="M0 0 L635 0 L334 290 Z " id="1"></path>
<!--
Image: 1440x1080
horizontally:
2,5 cm = 51 pixel
= 20,4 pixel per cm
-->
<defs>
<pattern id="fabric1001"
patternContentUnits="objectBoundingBox"
viewBox="0 0 1 1"
preserveAspectRatio="xMidYMid slice"
width="100%" height="100%">
<image xlink:href="https://cdn.shopify.com/s/files/1/0081/1076/8185/products/3.jpg?v=1540031315"
x="0" y="0"
width="1"
height="1"
preserveAspectRatio="xMidYMid slice" />
</pattern>
</defs>
</svg>
到目前为止,我设法将图像添加为图案,然后使用 URL 引用填充形状。我不明白的是如何告诉 SVG 该图像中的 20.4 像素对应于 10 个用户空间单位?
【问题讨论】:
-
你使用模式的方式,它的内容从不重复(从不重复显示)。您是否希望以可能发生重复的方式使用它?您的示例图片不适合这种用途。
-
@ccprog 感谢您的评论。示例图像就是这样,一个测试图像我可以用来得到这个正确的。对于实际使用,图像会更好,并且不会包含校准图案。我不认为我会使用平铺,因为现在每个图像在真实空间中都更大,然后任何路径都将是(如果有意义的话)