Nodejs使用sharp图片处理之图片旋转

上篇文章有讲到Nodejs使用sharp将多个图片合成一个图片,但是对于有的图片可能会先进行旋转,然后再参与图片的合成,这时我们就需要针对单个图片进行旋转的处理。

在sharp提供的官方文档中提供了rotate来进行图片旋转,合成的具体步骤如下所示:

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

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

    // 组装合成数据,此处需要使用Promise.all,等待数据组装完成再进行下步操作
    const info = await Promise.all(data['layers']).then(async (item) => {
        const result = [];
        for (let i = 0; i < item.length; i++) {
            let resultInfo = [];

            // 图片旋转处理
            if (data['layers'][i]['rotate'] !== 0) {
                // 获取旋转图片信息
                const sharpInfo = await sharp(data['layers'][i]['url']).metadata();

                // 旋转后的图片地址
                const outPath = `${__dirname}/image/rotate/${id}.png`;

                // 旋转图片
                await sharp(imageData).rotate(rotate, { background: 'rgba(0,0,0,0)' }).toFile(outPath);

                // 获取旋转后的图片信息
                const sharpRotateInfo = await sharp(data['layers'][i]['url']).metadata(outPath);

                // 获取中心点
                const centerLeft = sharpInfo.width / 2 + left;
                const centerTop = sharpInfo.height / 2 + top;

                // 设置旋转中心点
                const rotateLeft = centerLeft - sharpRotateInfo.width / 2;
                const rotateTop = centerTop - sharpRotateInfo.height / 2;

                data['layers'][i]['url'] = outPath;
                data['layers'][i]['top'] = parseInt(String(rotateTop), 10);
                data['layers'][i]['left'] = parseInt(String(rotateLeft), 10);
            }

            result.push({
                input: data['layers'][i]['url'],
                blend: data['layers'][i]['blend'],
                top: data['layers'][i]['top'],
                left: data['layers'][i]['left'],
            });
        }

        return result;
    });

    // 合成图片
    await sharp({ // 创建画板
        create: {
            data['width'], // 画板宽度
            data['height'], // 画板高度
            channels: 4,
            background: { r: 255, g: 255, b: 255, alpha: 1 } // 画板背景色
        },
    })
        .composite(info)
        .toFile(url);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Node.js 中的图片处理模块有很多,以下是一些常用的: 1. Sharp:一个高性能的图片处理库,支持缩放、裁剪、旋转、锐化、模糊等操作。 2. Jimp:一个纯 JavaScript 编写的图片处理库,支持常见的图片操作,如缩放、裁剪、旋转、滤镜等。 3. GraphicsMagick:一个功能强大的图片处理库,支持多种格式的图片处理,如缩放、旋转、剪裁等,可以通过 Node.js 的 gm 模块调用。 4. ImageMagick:与 GraphicsMagick 类似,同样是一个功能强大的图片处理库,也可以通过 Node.js 的 imagemagick 模块调用。 5. canvas:一个基于 HTML5 Canvas 的图片处理库,支持绘制、裁剪、变换等操作,可以在 Node.js 中使用。 以上是一些常用的 Node.js 图片处理模块,你可以根据自己的需求选择合适的模块。 ### 回答2: Node.js中有一些常用的图片处理模块,可以方便地进行图片处理和操作。 1. GraphicsMagick:它是一个强大的开源图片处理库,Node.js使用gm模块来对其进行封装。它支持各种图片格式的读取与写入,可以进行图片缩放、裁剪、旋转、合并等操作。使用该模块可以很方便地在Node.js中处理大量的图片。 2. Sharp:这是一个高性能的图像处理库,可以用于修改、调整和转换图像。它支持图片的压缩、缩放、裁剪、旋转等操作,并具有较高的速度和内存使用效率。Sharp处理大型图片时表现出色,是一个非常流行的图片处理模块之一。 3. Jimp:这是一个纯JavaScript编写的图片处理库,可以在Node.js中进行图片处理和操作。它支持常见的图片格式,并且提供了丰富的API来进行图片的缩放、裁剪、颜色处理、文本叠加等操作。Jimp易于学习和使用,适合用于简单的图片处理需求。 这些图片处理模块都可以在Node.js中很方便地安装和使用,可以根据具体的需求选择适合自己的模块来处理图片。无论是对于网站的图片上传和处理,还是对于图像数据的分析和处理,Node.js的图片处理模块都能提供便捷的解决方案。 ### 回答3: Node.js中的图片处理模块有很多选择,其中一些最受欢迎和广泛使用的模块包括: 1. `sharp`:这是一个高性能的图像处理库,可以在Node.js中快速处理图像。它支持图像的调整大小、裁剪、旋转、转换格式、应用滤镜等操作。 2. `gm`:这是另一个流行的图像处理模块,可以使用GraphicsMagick或ImageMagick在Node.js中进行图像操作。它支持图像的剪裁、缩放、旋转、转换格式等功能。 3. `jimp`:这是一个纯JavaScript编写的图像处理库,在Node.js中可以进行图像的调整大小、裁剪、旋转、滤镜应用等操作。它提供了易于使用的API,并且支持跨平台使用。 4. `lwip`:这是一个轻量级的图像处理库,可以在Node.js中进行图像的缩放、裁剪、旋转等操作。它提供了简单的API和异步操作,适合用于快速的图像处理需求。 除了以上提到的模块,还有许多其他的图像处理模块可供选择,每个模块都有其特定的优点和适用场景。根据项目需求和个人偏好,选择合适的模块进行图像处理是非常重要的。需要根据具体的使用情况和需求来评估各个模块的性能、功能和易用性,并选择最适合的模块来完成工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值