【问题标题】:Overlaying png onto SVG using Sharp?使用Sharp将png叠加到SVG上?
【发布时间】:2018-09-17 15:22:35
【问题描述】:

我有一组 4500x5400 的 png 文件。

我想要做的是:

  1. 以 300dpi 画一个 485x485 的圆
  2. 将 png 覆盖在圆圈内,使其调整大小(缩放)

我整晚都在胡闹,但我没有走多远:

我有我的圈子的代码:

  '<svg height="485" width="485"><circle cx="242.5" cy="242.5" r="242.5" fill="#3a4458"/></svg>'

然后是一些调整我的 png 大小的调整大小代码,并将其屏蔽。

sharp(`${toConvert}/${file}`)
  .trim()
  .resize(485, 485)
  .embed()
  .overlayWith('overlay.png', { cutout: true } )
  .toFile(`./converted/${file}-pop.png`)
  .catch(err => {
    console.log(err)
  })

有谁知道我如何将 2 组合起来,这样我就可以得到一个带有我的 png 的彩色圆圈?

供参考,Sharp是一个图像处理库:https://github.com/lovell/sharp

【问题讨论】:

  • 究竟什么是“锐利”?您添加了一个标签,但您忘记检查是否是您需要的标签:很明显不是。您能否在问题中添加一些链接,以便人们可以查找您所指的内容?话虽如此,您有一个 SVG,只需自己制作一些按比例缩小的版本,然后指向您的 SVG 文件中应用了圆形剪贴蒙版的那些。为什么还要使用那个锋利的图书馆?
  • 啊,我的错。它是一个图像处理库! github.com/lovell/sharp

标签: node.js sharp


【解决方案1】:

这是我的项目中的一个圆形封面,

首先在SVG.js的帮助下创建一个圆形SVG,你可以使用背景属性来获取彩色圆圈。

const window = require('svgdom');


const SVG = require('svg.js')(window);

const document = window.document;


const ShapeUtil = {

    drawCircle: function (width, height) {
        return new Promise(function (resolve, reject) {
            var circleDraw = SVG(document.documentElement).size(width, height);

            circleDraw.clear();
            circleDraw.viewbox(0, 0, width, height);
            circleDraw.circle(width).cx(Math.abs(width / 2)).cy(Math.abs(width / 2));
            resolve(circleDraw.svg());
        });

    } 

};

然后覆盖创建 SVG dom 以使用 Sharp.io 裁剪图像:

 ShapeUtil.drawCircle( width,  height)
                        .then(function (resultSVG) {
                            sharp(croppedImage)
                                .overlayWith(new Buffer(resultSVG), {cutout: true})
                                .png().toBuffer();
                        }

【讨论】:

  • 谢谢。知道如何让夏普生成 485x485 png,但 png 内的图像已调整为 440x440
  • 首先,您可以将主图像的大小调整为 440x404,然后使用尺寸为 485x485 的 SVG 图像进行叠加。这就是你要找的吗?
  • 这里很好地使用了 svgdom。它如何为您工作?真的很想谈一谈。你可以在 gitter 的 svg.js 房间找到我 :)
猜你喜欢
  • 2021-12-01
  • 2013-02-24
  • 1970-01-01
  • 2016-10-16
  • 2021-04-21
  • 2014-11-05
  • 1970-01-01
  • 2019-12-02
  • 2011-03-03
相关资源
最近更新 更多