如何在HTML/CSS中裁剪SVG文件

f4t66c6m  于 2022-11-20  发布在  其他
关注(0)|答案(7)|浏览(334)

我有下面的HTML文件(mypage.html)。一个SVG文件作为图像附加到它。

<!doctype html>
<html>

<body>

    <!-- Display legend -->
    <div>
        <center> <img src="circos-table-image-medium.svg" height=3500; width=3500; /> </center>
    </div>

</body>
</html>

它生成的页面如下所示:

注意圆圈周围有一个很大的白色。我如何在html或CSS中裁剪它呢?

iyfamqjs

iyfamqjs1#

裁剪

您可以使用负数边界并固定父元素的大小来裁剪影像:
CSS Display an Image Resized and Cropped

但这是SVG!

您不仅可以直接在html中显示SVG:

<svg viewBox="0 0 100 100" height="150px" width="150px">
  <rect x="10" y="10" rx="5" width="80" height="80" fill="pink" stroke="green" stroke-width="5"/>
</svg>

但是要进行裁剪/调整大小,只需更改标记上的viewBox属性:

viewBox="0 0 100 100"

将显示0到100单位x和y内任何内容

viewBox="-100 -100 100 100"

将显示-100到100单位x和y之间的任何值

viewBox="50 50 500 500"

将显示50到500单位x和y之间的任何值

w51jfk4q

w51jfk4q2#

这些答案(和多个类似/重复)似乎都没有完全回答这一点,并提供了一个例子。

逐步说明:直接在SVG代码中删除“填充”(周围白色)

  • 确定没有填充的svg的“实际”大小。对我来说,这是最简单的方法,使用(Chrome)检查器,并将鼠标悬停在检查器中的 path 元素上。您将看到宽度和高度显示在浏览器中实际svg的旁边。
  • 如果有多个路径元素,我发现最后一个通常是“包含”元素。
  • 现在直接在文本/代码编辑器中编辑svg代码,只需要修改svg元素标签中的代码。
  • 将宽度和高度属性更改为您在步骤1中确定的“实际”尺寸。
  • 改变viewBox属性的4个维度。没有单位,只有数字(比如10而不是10 px)。
  • 我们将从第三个和第四个数字开始,这将再次是你的“实际”宽度和高度。
  • 第一维和第二维是viewBox中svg部分的“原点”的x和y坐标。它们将分别更改(从可能的0 0)为:初始宽度和高度与实际宽度和高度之差的一半。用简单的(CSS)术语来说,就是左边距和上边距。

困惑?简单的分步示例

这个例子将使它变得非常简单,并将直接使用下面的svg作为参考。如果你想完成这个例子,只需将下面的所有代码 Package 在HTML标签<html> svg code </html>中,并在浏览器中打开。

<svg xmlns="http://www.w3.org/2000/svg" width="48" 
    height="48" viewBox="0 0 48 48">
    <path d="M40 4H8C5.79 4 4.02 5.79 4.02 8L4 44l8-8h28c2.21 
    0 4-1.79 4-4V8c0-2.21-1.79-4-4-4zM12 
    18h24v4H12v-4zm16 10H12v-4h16v4zm8-12H12v-4h24v4z"/></svg>
  • 我们假设你已经完成了第一步,并确定了没有填充的svg的“实际”尺寸。在这个例子中,实际尺寸是40 x 40。改变svg的属性来反映这一点。
width="40" height="40"
  • 我们的初始尺寸是48 x 48,而实际尺寸(无填充)是40 x 40。此差异的一半是4 x 4。相应地更改viewBox属性,并添加实际宽度和高度。
viewBox="4 4 40 40"
  • 我们的开始svg标记现在应该反映这些变化。
<svg xmlns="http://www.w3.org/2000/svg" width="40" 
    height="40" viewBox="4 4 40 40">
  • 如果svg的上下和左右的填充量不同,这不是问题。只需按照上面的标准说明操作,然后使用viewBox属性的前2个值,了解这些值如何沿着x和y轴移动图像。
  • 我今晚在处理同一个问题时才了解到这一切。完全欢迎任何比我更了解可缩放矢量图形的人提出建议/编辑 *
txu3uszq

txu3uszq3#

你可以用片段标识符来做你想做的事情。片段标识符允许你定义你想在img标签中显示的SVG片段,并允许控制图像转换和长宽比。
在svgurl的末尾加上#svgView(viewBox(0, 0, 32, 32))定义了svg中要显示的区域。前两个参数是viewbox左上角的x和y坐标,后两个参数是viewbox的宽度和高度。
使用此技术,您的img标签看起来会像这样:

<img src="circos-table-image-medium.svg#svgView(viewBox(0, 0, 32, 32))" height="3500" width="3500" />

确保视图框的纵横比与img标签的纵横比匹配是很重要的,否则您的视图框将无法正确调整大小/对齐。如果您需要进一步控制纵横比,您可以始终使用preserveAspectRatioSpec片段标识符。
为了找到整个图像的viewBox,请直接访问svg url并检查页面元素,以找到最外层svg元素上定义的viewBox。
有了这些信息,您现在可以根据需要定制视图框。
CodePen Example Here

zpgglvta

zpgglvta4#

只需使用Inkscape
首先,我建议阅读大卫Rebd的文章,了解如何通过文本编辑器(如Notepad++)调整SVG图像的尺寸。
然后在Inkscape中,只需单击该项目,您就可以从字面上只设置尺寸,甚至不必担心精确的鼠标拖动。
如果缺少工具栏,请单击“视图”菜单,然后单击“显示/隐藏”并启用“工具控制栏”。

r1wp621o

r1wp621o5#

只需在https://svgcrop.com上单击一下即可完成此操作

n3h0vuf2

n3h0vuf26#

在inkscape中裁剪任何格式,基于https://designbundles.net/design-school/how-to-crop-an-image-in-inkscape#
1.使用箭头工具选择图像/对象(全部),左键单击;
1.转到菜单“对象”,“解组”(这一步是不需要的照片)
1.“选择矩形工具(或您要使用的任何形状工具)在您要裁剪的图像上绘制形状。”
1.使用箭头工具,选择所有对象,因为它们可能被取消分组,在所有区域上拖动左键单击(否则,使用shift +左键单击)
1.在新形状上(裁剪区域步骤2)右键单击并选择“设置裁剪”
1.在“编辑”菜单中,使用“调整页面大小以适应所选内容”

sqyvllje

sqyvllje7#

在尝试用代码修复之前,您可能需要尝试优化SVG布局。检查器中可见的白色暗示SVG没有紧密地设置到画板上。如果您有Adobe Illustrator可用,请在其中打开SVG。您应该会看到类似于以下内容的内容:

白色区域是画板,圆形区域是SVG。您要做的是确保SVG与画板大小相同。此按钮允许您调整画板的大小:

选择那个,选择你的白色正方形,把边缘接触你的圆,并保存你的SVG。
另一个可能的解决方案是,SVG文件中有一个剪切蒙版,它会扩展SVG图形的大小。在这种情况下,您需要尽可能地删除这些蒙版。要判断是否有剪切蒙版影响您的SVG,请单击您的圆圈。如果选中时周围的框没有接触到圆圈的边缘,则说明有一个剪切蒙版将图像边界向外推。

看看你的图像,这可能是相当复杂的,如果你不太熟悉矢量编辑,它可能会更快,更容易把它传递回设计师。

相关问题