Nodejs使用sharp图片处理之多图合成

在开发过程中,我们有时候需要对图片进行处理,给一个图片添加水印、多个图片合成为一图片等操作,所以我们介绍下nodejs使用sharp来处理上述问题。
对于上述问题的话,就是多图合并为一个图片,首先我们要知道最终输出画板的宽高,然后里面每一个图片的宽高、在画板的位置【上边距、左边距】、旋转的角度等信息。

 具体信息可以如下所示:
{
    "title": "Sharp合成图片",
    "width": 1960,
    "height": 1208,
    "layers": [
        {
            "url":"1.jpg",
            "left": 0,
            "top": 0,
            "rotate": 0
        },
        {
            "url":"2.jpg",
            "left": 100,
            "top": 500,
            "rotate": 40
        }
    ]
}

在sharp提供的官方文档中提供了composite来进行多图合成,合成的具体步骤如下所示

	// 合成数据
	const data = {
        "title": "Sharp合成图片", // 图片名称
        "width": 1960, // 画板宽度
        "height": 1208, // 画板高度
        "layers": [
            {
                "url":"1.jpg", // 根据地址项目中要能够找到该路径的图片
                "left": 0,
                "top": 0,
                "rotate": 0,
                "blend": "over", // 图片混合模式-如不需指定则不用添加该参数
            },
            {
                "url":"2.jpg",
                "left": 100,
                "top": 500,
                "rotate": 40,
                "blend": "over",
            }
        ]
    }

    // 指定输入文件路径
    const url = `${__dirname}/image/out/${data['title']}.jpg`

    // 组装合成数据
    let info = [];
    for (let i = 0; i < data['layers'].length; i++) {
        info.push({
            input: data['layers'][i]['url'],
            blend: data['layers'][i]['blend'],
            top: data['layers'][i]['top'],
            left: data['layers'][i]['left'],
        });
    }

    // 合成图片
    await sharp({ // 创建画板
        create: {
            data['width'], // 画板宽度
            data['height'], // 画板高度
            channels: 4,
            background: { r: 255, g: 255, b: 255, alpha: 1 } // 画板背景色
        },
    })
        .composite(info)
        .toFile(url);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用`pdfkit`和`canvas`模块来实现图片合成 pdf。 首先需要安装这两个模块: ``` npm install pdfkit canvas ``` 然后编写代码: ```javascript const PDFDocument = require('pdfkit'); const { createCanvas, loadImage } = require('canvas'); const fs = require('fs'); // 创建一个 PDF 文档 const doc = new PDFDocument(); // 定义图片的宽度和高度 const width = 300; const height = 200; // 加载图片 loadImage('image1.jpg').then(image1 => { loadImage('image2.jpg').then(image2 => { // 获取图片数量 const imageCount = 2; // 设置文档页面数量 doc.info['Title'] = 'My Document'; doc.info['Author'] = 'John Doe'; doc.info['Subject'] = 'Testing PDF Kit'; doc.info['Keywords'] = 'PDFKit, JavaScript, PDF, generator'; doc.info['Producer'] = 'PDFKit'; doc.info['Creator'] = 'John Doe'; doc.registerFont('NotoSans', 'fonts/NotoSansCJKsc-Regular.otf'); doc.info['Title'] = 'My Document'; doc.pipe(fs.createWriteStream('output.pdf')); // 循环添加每张图片到文档中 for (let i = 0; i < imageCount; i++) { const canvas = createCanvas(width, height); const ctx = canvas.getContext('2d'); ctx.drawImage(i === 0 ? image1 : image2, 0, 0, width, height); // 将 canvas 添加到 PDF 文档中 doc.image(canvas.toBuffer(), 50, 50, { width: width, height: height }); doc.addPage(); } // 结束文档 doc.end(); }); }); ``` 在以上代码中,我们使用`loadImage`方法从文件中加载图片,并将它们添加到 PDF 文档中。我们还需要使用`createCanvas`方法创建一个新的画布,并在画布上绘制图片。最后,我们使用`doc.image`方法将画布添加到 PDF 文档中。 运行代码后,会在当前目录下生成一个名为`output.pdf`的 PDF 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值