【问题标题】:Batik - put SVG on top of image蜡染 - 将 SVG 放在图像之上
【发布时间】:2014-08-16 06:43:06
【问题描述】:

我有一个图像文件(jpg 等)和一些 svg 图纸(从站点复制的 svg 标记,作为 Java 字符串)。 svg 绘图与图像文件具有相同的分辨率。我想将 svg 绘图放在图像之上并将其保存为一个文件。我的方法是:

  • 使用 Batik 的 JPEGTranscoder 将 svg 转码为带有此 svg 图纸和白色背景的图像,保存此图像
  • 通过对每个像素执行低级操作,将带有 svg 绘图的图像放在我的图像文件顶部

我希望能够一步将 svg 图纸放在我的图像之上。

【问题讨论】:

    标签: java image-processing svg batik


    【解决方案1】:

    使用 SVG 模式可以解决您的问题。

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
        width="200" height="200">
      <defs>
        <pattern id="image" x="0" y="0" patternUnits="userSpaceOnUse" height="200" width="200">
            <image x="0" y="0" width="200" height="200"
                xlink:href="http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"/>
        </pattern>
      </defs>
      <rect width="200" height="200" fill="url(#image)"/>
      <circle cx="100" cy="100" r="50"/>
    </svg>
    

    小提琴可用here

    我通过 batik rasterizer 拉出了上面的 SVG,它被正确地光栅化了。

    更新
    如 cmets 中所述,您也可以直接将图像包含在 SVG 中,而无需使用模式。

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
          width="200" height="200">
      <image x="0" y="0" width="200" height="200"
          xlink:href="http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png"/>
      <circle cx="100" cy="100" r="50"/>
    </svg>
    

    小提琴可用here

    【讨论】:

    • 为什么你认为模式是必要的?为什么不直接使用&lt;image&gt; 标签包含图像?
    • @RobertLongson 这会更简单,而且应该同样有效。感谢您的评论,我会更新我的答案。
    • 完美!非常感谢!
    猜你喜欢
    • 2014-09-08
    • 2015-12-19
    • 2019-08-08
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多