将图像放在另一个 png/svg 文件中

Posted

技术标签:

【中文标题】将图像放在另一个 png/svg 文件中【英文标题】:Placing an Image inside another png/svg file 【发布时间】:2021-10-20 05:45:40 【问题描述】:

目前我有一个 png 图像,中间有一个空的蓝色空间。参考图片:

我希望能够通过 html 将另一个图像嵌入到蓝色空间中。我想到的一种解决方案是创建一个 SVG,但我如何让图像适合 svg。 我不能使用绝对定位来放置这些图像,因为带有蓝色空间的主图像被动态放置在地图中作为标记。

当前 SVG:

  <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
       viewBox="0 0 85.000000 109.000000"
     preserveAspectRatio="xMidYMid meet">
    <metadata>
    Created by potrace 1.10, written by Peter Selinger 2001-2011
    </metadata>
    <g transform="translate(0.000000,109.000000) scale(0.100000,-0.100000)"
    fill="#ffff00" stroke="none">
    <path d="M390 1061 c-5 -11 -38 -33 -72 -50 -68 -34 -63 -43 6 -11 44 21 109
    80 88 80 -6 0 -16 -9 -22 -19z"/>
    <path d="M455 1050 c55 -57 178 -99 295 -100 31 0 61 -5 68 -12 9 -9 12 -84
    12 -278 0 -340 -1 -344 -114 -455 -76 -75 -182 -146 -265 -178 -27 -10 -37 -8
    -88 17 -139 68 -259 167 -312 256 -25 43 -26 52 -32 240 l-6 195 1 -200 c1
    -197 1 -201 27 -245 64 -109 300 -280 385 -280 31 0 154 65 229 120 71 52 143
    133 166 185 18 40 19 65 17 342 l-3 298 -84 7 c-152 13 -257 47 -288 94 -8 13
    -20 24 -26 24 -6 0 2 -14 18 -30z"/>
    <path d="M406 1035 c-32 -49 -201 -104 -323 -105 l-43 0 0 -282 c0 -277 1
    -284 24 -333 39 -82 146 -174 291 -250 l67 -34 61 31 c151 76 265 170 303 253
    23 49 24 57 24 330 l0 281 -103 12 c-124 13 -206 42 -252 87 l-33 34 -16 -24z
    m63 -48 c9 -8 33 -20 53 -28 20 -7 35 -16 32 -20 -2 -4 5 -5 16 -2 11 3 20 1
    20 -5 0 -5 41 -15 92 -21 51 -7 93 -13 94 -14 1 -1 5 -117 8 -257 5 -187 3
    -266 -6 -295 -14 -47 -130 -170 -193 -204 -22 -12 -62 -35 -90 -51 -27 -16
    -59 -29 -70 -29 -21 0 -138 58 -120 59 6 0 -9 9 -32 20 -24 10 -43 24 -43 30
    0 5 -6 10 -13 10 -7 0 -39 26 -70 57 -43 43 -56 62 -51 77 4 15 3 17 -4 7 -7
    -10 -12 -5 -20 20 -13 38 -16 558 -4 561 4 0 19 2 33 3 67 5 135 17 172 31 56
    21 127 56 133 65 6 11 44 2 63 -14z"/>
    <path d="M228 973 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
    <path d="M173 963 c9 -2 23 -2 30 0 6 3 -1 5 -18 5 -16 0 -22 -2 -12 -5z"/>
    <path d="M16 944 c-3 -9 -5 -59 -4 -112 l2 -97 3 85 c4 127 5 128 61 133 l47
    3 -51 2 c-39 2 -53 -2 -58 -14z"/>
    </g>
    </svg>

【问题讨论】:

将图像包装在容器中,然后对第二张图像使用绝对定位 @Pete 我不能这样做,因为这些图像作为标记被动态放置在地图上 当然,如果它们是地图标记,那么为每种类型的标记创建单独的图标会更容易,而不是试图在图像中捏造一些图像 - 我看不出你的方法会有什么好处- 每个次要图像仍然需要单独的图像 嗯,我正在尝试将每个国家/地区的风景嵌入蓝色空间中。不是你可以用不同的图标真正表示的东西 【参考方案1】:

我正在使用您的部分路径来剪辑图像。

我也在使用带有&lt;use&gt; 的那部分作为边框。

观察:虽然我使用了您的部分代码,但您拥有的路径对剪辑没有用处,因为它们大多是空心路径。

svgborder:solid
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 850 1090" preserveAspectRatio="xMidYMid meet">

  <clipPath id="clip">
    <path id="path" transform="translate(0,1090) scale(1,-1)" d="M406 1035 c-32 -49 -201 -104 -323 -105 l-43 0 0 -282 c0 -277 1
    -284 24 -333 39 -82 146 -174 291 -250 l67 -34 61 31 c151 76 265 170 303 253
    23 49 24 57 24 330 l0 281 -103 12 c-124 13 -206 42 -252 87 l-33 34 -16 -24z" />
  </clipPath>

  <image x="-200" y="30"   clip-path="url(#clip)" xlink:href="https://assets.codepen.io/222579/darwin300.jpg" />

  <use xlink:href="#path" fill="none" stroke="gold" stroke- />
</svg>

另一种方法是使用图像作为填充路径的图案。

请注意,在这种情况下,我使用的是转换后的(倒置)图像。

svgborder:solid
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 850 1090" preserveAspectRatio="xMidYMid meet">
  
   <pattern id="pat"  >   
  <image x="-200" y="30"   transform="translate(0,1090) scale(1,-1)"  xlink:href="https://assets.codepen.io/222579/darwin300.jpg" />
  </pattern>

 <g transform="translate(0,1090) scale(1,-1)" >
    <path id="path" d="M406 1035 c-32 -49 -201 -104 -323 -105 l-43 0 0 -282 c0 -277 1
    -284 24 -333 39 -82 146 -174 291 -250 l67 -34 61 31 c151 76 265 170 303 253
    23 49 24 57 24 330 l0 281 -103 12 c-124 13 -206 42 -252 87 l-33 34 -16 -24z"  fill="url(#pat)"/>
   <use xlink:href="#path" fill="none" stroke="gold" stroke- />
  </g>
</svg>

【讨论】:

以上是关于将图像放在另一个 png/svg 文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像放在另一个图像视图中

将图像放在另一个在 Android 中拉伸的图像上

使用python将图像放在另一个图像上

PHP - 将图像放在另一个图像上

将图像放在另一个图像之上

将 grep 输出放在另一行的末尾到另一个文件中