【JavaScript脚本宇宙】揭开Node.js图像处理的秘密:图像格式转换库

轻松玩转图像处理:从入门到精通

前言

本文将介绍五个用于图像处理的Node.js库,包括Jimp、Sharp、gm、lwip和node-vibrant。这些库提供了各种功能,如图像格式转换、调整大小、裁剪、旋转和主色调提取等。每种库都有其独特的特点和适用场景。

欢迎订阅专栏:JavaScript脚本宇宙

文章目录

  • 轻松玩转图像处理:从入门到精通
    • 前言
    • 1. Jimp:一个用于Node.js的图像处理库
      • 1.1 安装与基础使用
        • 1.1.1 安装方法
        • 1.1.2 基础示例代码
      • 1.2 常见功能
        • 1.2.1 图像格式转换
        • 1.2.2 调整大小
        • 1.2.3 裁剪与旋转
    • 2. Sharp:一个高性能的Node.js图像处理库
      • 2.1 安装与基础使用
        • 2.1.1 安装方法
        • 2.1.2 基础示例代码
      • 2.2 常见功能
        • 2.2.1 图像格式转换
        • 2.2.2 调整大小
        • 2.2.3 裁剪与旋转
    • 3. gm:GraphicsMagick和ImageMagick的Node.js接口
      • 3.1 安装与基础使用
        • 3.1.1 安装方法
        • 3.1.2 基础示例代码
      • 3.2 常见功能
        • 3.2.1 图像格式转换
    • 4. lwip:轻量级无依赖图像处理库
      • 4.1 安装与基础使用
        • 4.1.1 安装方法
        • 4.1.2 基础示例代码
      • 4.2 常见功能
        • 4.2.1 图像格式转换
    • 5. node-vibrant: 提取图像主色调的库
      • 5.1 安装与基础使用
        • 5.1.1 安装方法
        • 5.1.2 基础示例代码
      • 5.2 常见功能
        • 5.2.1 提取主色调
    • 6. Pica:快速纯JS图像缩放库
      • 6.1 安装与基础使用
        • 6.1.1 安装方法
        • 6.1.2 基础示例代码
      • 6.2 常见功能
        • 6.2.1 高质量图像缩放
    • 总结

1. Jimp:一个用于Node.js的图像处理库

Jimp是一个用于Node.js的图像处理库,它可以在服务器端进行图像处理和转换。它支持多种常见的图像操作,如调整大小、裁剪、旋转等,并且可以对图像进行滤镜处理,添加文字等操作。本文将介绍Jimp的基本使用方法、常见功能以及一些高级特性。

1.1 安装与基础使用

1.1.1 安装方法

可以使用以下命令通过npm来安装Jimp:

npm install --save Jimp

安装完成后,可以通过以下方式引入Jimp:

const Jimp = require('jimp');
1.1.2 基础示例代码

下面是一个简单的示例代码,展示了如何使用Jimp来读取一张图片并输出其宽度和高度:

const Jimp = require('jimp');Jimp.read('image.png').then(image => {console.log('Image width:', image.bitmap.width);console.log('Image height:', image.bitmap.height);}).catch(err => {console.error(err);});

在上述代码中,我们首先通过Jimp.read()方法读取了一张名为’image.png’的图片,然后通过image.bitmap.widthimage.bitmap.height获取了图片的宽度和高度。最后,我们将结果输出到控制台。

1.2 常见功能

1.2.1 图像格式转换

Jimp支持多种常见的图像格式,包括PNG、JPEG、BMP等。下面是一个示例代码,展示了如何将一张PNG图片转换为JPEG格式:

const Jimp = require('jimp');Jimp.read('image.png').then(image => {return image.write('image.jpg');}).catch(err => {console.error(err);});

在上述代码中,我们首先通过Jimp.read()方法读取了一张PNG图片,然后通过image.write('image.jpg')方法将其以JPEG格式保存到文件中。

1.2.2 调整大小

Jimp可以方便地对图片进行调整大小操作。下面是一个示例代码,展示了如何将一张图片的宽度和高度分别调整为原来的一半:

const Jimp = require('jimp');Jimp.read('image.png').then(image => {return image.resize(image.bitmap.width / 2, image.bitmap.height / 2).write('resized_image.png');}).catch(err => {console.error(err);});
1.2.3 裁剪与旋转

Jimp也支持裁剪和旋转图像。以下是将图像旋转45度并裁剪其中心部分的示例代码:

Jimp.read('image.png').then(image => {return image.rotate(45); // 将图像旋转45度}).then(image => {const x = Math.floor(image.bitmap.width / 4); // 计算要保留的部分的中心点x坐标const y = Math.floor(image.bitmap.height / 4); // 计算要保留的部分的中心点y坐标const w = Math.floor(image.bitmap.width / 2); // 要保留的部分的宽度const h = Math.floor(image.bitmap.height / 2); // 要保留的部分的高度return image.crop(x, y, w, h); // 裁剪图像的中心部分}).then(image => {return image.writeAsync('newImage.png'); // 将图像保存为新文件}).catch(err => {console.error(err);});

2. Sharp:一个高性能的Node.js图像处理库

Sharp是一个基于Libvips的高性能图像处理库,专为高负荷环境下运行而设计。它提供了许多常见的图像处理功能,如调整大小、裁剪、旋转和格式转换等。

2.1 安装与基础使用

2.1.1 安装方法

通过npm安装:

npm install sharp
2.1.2 基础示例代码

下面是一个简单的代码示例,展示了如何使用Sharp来调整图像的大小并转换其格式:

const sharp = require('sharp');
const image = sharp('input.jpg');
image.resize(300, 200).toFormat('png').save('output.png', (err) => {if (err) throw err;console.log('Image saved');});

2.2 常见功能

2.2.1 图像格式转换

Sharp支持多种常见的图像格式,包括JPEG、PNG、WebP、SVG等。下面是一个将JPEG格式的图像转换为PNG格式的示例代码:

const sharp = require('sharp');
const image = sharp('input.jpg');
image.toFormat('png').save('output.png', (err) => {if (err) throw err;console.log('Image converted and saved');});

更多关于图像格式转换的信息,可以参考Sharp的官方文档:https://sharp.pixelplumbing.com/api-output。

2.2.2 调整大小

Sharp提供了几种不同的方式来调整图像的大小。您可以使用resize方法来指定新的宽度和高度,或者使用withoutEnlargement选项来防止图像被放大。下面是一个调整图像大小的示例代码:

const sharp = require('sharp');
const image = sharp('input.jpg');
image.resize(300, 200).save('output.jpg', (err) => {if (err) throw err;console.log('Image resized and saved');});

更多关于调整大小的信息,可以参考Sharp的官方文档:https://sharp.pixelplumbing.com/api-resize。

2.2.3 裁剪与旋转

Sharp还支持图像的裁剪和旋转操作。您可以使用crop方法来裁剪图像的一部分,或者使用rotate方法来旋转图像。下面是一个裁剪并旋转图像的示例代码:

const sharp = require('sharp');
const image = sharp('input.jpg');
image.crop(100, 75, 50, 25).rotate(90).save('output.jpg', (err) => {if (err) throw err;console.log('Image cropped, rotated and saved');});

3. gm:GraphicsMagick和ImageMagick的Node.js接口

gm(graphicsmagick)是node.js的一个图像处理库,它提供了对GraphicsMagick和ImageMagick这两个强大图像处理工具的支持。使用gm可以在node.js中实现对图像的各种操作,如格式转换、调整大小、裁剪、旋转等。同时,gm还支持添加文字、水印等高级功能。下面就让我们一起来了解一下如何使用gm进行图像处理吧!

3.1 安装与基础使用

3.1.1 安装方法

在开始使用gm之前,我们需要先安装它。可以使用以下命令进行安装:

npm install gm --save

这个命令会在你的项目中安装gm,并将它添加到项目的package.json文件中。

3.1.2 基础示例代码

安装完成后,我们可以编写一个简单的示例代码来测试一下gm的功能。假设我们想要将一张图片转换为png格式并保存到本地,可以按照以下代码进行操作:

const gm = require('gm');gm('input.jpg') // 读取输入图片
.format('png') // 转换为png格式
.write('output.png', (err) => { // 保存到本地并处理错误if (err) throw err; // 如果有错误,则抛出异常console.log('Image converted and saved!'); // 否则输出成功信息
});

在这个例子中,我们首先使用require()函数引入了gm模块。然后通过gm()函数读取了一个名为"input.jpg"的图片文件。接下来我们调用了format()函数将图片的格式转换为png格式。最后,我们使用write()函数将转换后的图片保存到本地,并在回调函数中处理了可能的错误情况。

3.2 常见功能

3.2.1 图像格式转换

gm库支持多种图像格式之间的转换。下面是一个示例代码,演示如何将一个PNG图像转换为JPEG格式:

const gm = require('gm');// 打开图像
gm('image.png')// 转换格式为JPEG.format('jpg')// 保存结果.write('image.jpg', (err) => {if (err) throw err;console.log('Converted image saved as image.jpg');});

4. lwip:轻量级无依赖图像处理库

lwip是一个轻量级的无依赖的图像处理库。相比于其他图像处理库,lwip不需要依赖像ImageMagick这样的外部库,使得安装和使用更加方便。下面将详细介绍如何使用lwip进行图像格式转换、调整大小、裁剪与旋转等操作。

4.1 安装与基础使用

4.1.1 安装方法

可以使用npm进行安装:

npm install --save lwip
4.1.2 基础示例代码
const lwip = require('lwip');// 打开图像
lwip.open('image.png', function(err, image) {// 如果发生错误则打印错误信息if (err) return console.log(err);// 显示图像宽度和高度console.log('width:', image.width(), 'height:', image.height());// 在控制台显示图像image.writeToStream(process.stdout);
});

4.2 常见功能

4.2.1 图像格式转换
const lwip = require('lwip')// 打开图像并转换为JPEG格式
lwip.open('image.png', function (err, src) {if (err) return console.error(err);src.batch().rotate(90)             // 旋转90度.resize(100, 100)       // 缩放到100x100像素.quality(90)            // 设置JPEG质量为90%.format('jpg')          // 转换为JPEG格式.saveAs('output.jpg', function (err) {if (err) return console.error(err);console.log('Image converted to JPEG and saved as output.jpg');});
});

5. node-vibrant: 提取图像主色调的库

node-vibrant是一个基于Node.js的图像处理库,用于从图像中提取主色调。它使用了Vibrant.js库,该库基于浏览器并使用WebAssembly进行颜色分析。node-vibrant可以将图像转换为不同的颜色模式,并生成相应的色板。

5.1 安装与基础使用

5.1.1 安装方法

可以使用npm来安装node-vibrant:

npm install node-vibrant
5.1.2 基础示例代码

以下是一个使用node-vibrant从图像中提取主色调的示例代码:

const Vibrant = require('node-vibrant');// 读取图像文件
const image = new Image().readSync('path/to/image.jpg');// 创建Vibrant对象
const vibrant = new Vibrant(image);// 获取主色调对象
const swatches = await vibrant.getSwatches();// 输出主色调的色值和权重
console.log(swatches.Vibrant); // { getRgb: [Function: getRgb], getHex: [Function: getHex], getHsl: [Function: getHsl], getTitleTextColor: [Function: getTitleTextColor], getBodyTextColor: [Function: getBodyTextColor] }
console.log(swatches.Vibrant.getHex()); // 例如:"#FF0000"

在上面的示例中,我们首先使用Image类读取了一个图像文件。然后,我们创建了一个Vibrant对象,并将图像作为参数传递给它。最后,我们使用getSwatches方法获取了图像的主色调对象,并输出了主色调的色值和权重。

5.2 常见功能

5.2.1 提取主色调
const Vibrant = require('node-vibrant');// 读取本地图片文件
const vibrant = new Vibrant('./path/to/image.jpg');// 获取主色调
vibrant.getColors().then((colors) => {console.log(colors); // 输出颜色对象
});

6. Pica:快速纯JS图像缩放库

Pica是一个快速、高质量的纯JavaScript图像处理库,它使用WebAssembly来加速图像处理操作。该库的主要功能包括图像缩放、旋转、裁剪和调整颜色等。

6.1 安装与基础使用

6.1.1 安装方法

可以使用npm或yarn命令来安装Pica:

# 使用npm安装
npm install pica# 使用yarn安装
yarn add pica

或者直接在HTML文件中通过script标签引入Pica的CDN链接:

<script src="https://cdn.jsdelivr.net/npm/pica@5"></script>
6.1.2 基础示例代码

假设我们有一张名为“image.jpg”的图片,将其缩放到宽度为300px,高度自动计算的代码如下:

const originalImage = document.getElementById('original'); // 获取原始图片元素
const resizedImage = document.getElementById('resized'); // 获取用于显示缩放后图片的元素// 创建一个Pica对象
const pica = new Pica({ features: ['js', 'wasm', 'ww'] });// 对图片进行缩放,并显示结果
pica.resize(originalImage, resizedImage, { width: 300 }).then(() => {console.log('Image resized successfully!');
});

在上面的代码中,我们首先通过getElementById方法获取原始图片元素和用于显示缩放后图片的元素。然后,创建一个Pica对象,并使用其resize方法对图片进行缩放。最后,通过Promise对象的then方法处理缩放完成后的逻辑。

6.2 常见功能

6.2.1 高质量图像缩放

Pica使用WebAssembly来加速图像处理操作,因此它可以提供高质量的图像缩放。相比于传统的基于像素 averaging 的方法,Pica使用了更先进的算法,例如 Lanczos resampling 和 bilinear interpolation,这些算法可以更好地保留图像细节和锐度。

以下是一个将图片缩放到宽度为300px,同时保持高度比例不变的例子:

const originalImage = document.getElementById('original');
const resizedImage = document.getElementById('resized');
const pica = new Pica({ features: ['js', 'wasm', 'ww'] });
pica.resize(originalImage, resizedImage, { width: 300, height: 'auto' }).then(() => {console.log('Image resized successfully!');
});

总结

在选择Node.js图像处理库时,需要考虑的因素包括性能、功能丰富性、易用性和稳定性等。Jimp是一个轻量级的库,适合进行基本的图像处理操作;Sharp则是一个高性能的库,适用于大规模图像处理场景;gm提供了丰富的高级功能,如添加文字和水印;lwip是一个无依赖的库,可以在浏览器中运行;node-vibrant可以提取图像的主色调;而pica则专注于高质量的图像缩放。根据具体的需求和场景,可以选择适合的库进行开发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【独家首发】ONLYOFFICE 8.1:革新办公体验,释放无限创意潜能!

一、全能PDF编辑器&#xff1a;重塑文档管理艺术 官方链接 官方链接&#xff1a;https://www.onlyoffice.com/zh/【点击跳转】 【办公界的变形金刚】ONLYOFFICE 8.1&#xff1a;让文件编辑比变魔术还神奇&#xff0c;一键解锁创意新高度&#xff01;" 在这个数字化的狂潮中…

百元蓝牙耳机哪款好?值得购买的百元蓝牙耳机品牌有这些

在如今移动互联网时代&#xff0c;蓝牙耳机已经成为不少人生活中的必备产品。然而&#xff0c;市面上的蓝牙耳机种类繁多&#xff0c;价格也参差不齐&#xff0c;选择一款性价比高的产品成了不少消费者的难题。尤其是针对百元左右的蓝牙耳机&#xff0c;更是需要慎重选择。那么…

详解 ClickHouse 的副本机制

一、简介 副本功能只支持 MergeTree Family 的表引擎&#xff0c;参考文档&#xff1a;https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/ ClickHouse 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#…

苹果电脑压缩pdf文件,苹果电脑里如何压缩pdf文件

压缩PDF文件是现代办公和日常生活中经常需要处理的一项任务&#xff0c;无论是为了节省存储空间、方便网络传输&#xff0c;还是为了在移动设备上更流畅地阅读文档&#xff0c;学会有效地压缩PDF都显得尤为重要。在本文中&#xff0c;我们将详细探讨压缩PDF的方法&#xff0c;从…

选型宝典(一)AMD Xilinx 7系列FPGA选型指导

引言introduction Xilinx 7系列FPGA采用28nm工艺&#xff0c;是近年来Xilinx公司推出的一系列高性价比的、应用领域最广泛的可编程逻辑器件。28nm FPGA包含了多个不同的产品线&#xff0c;如Spartan-7、Artix-7、Kintex-7和Virtex-7以及ZYNQ7000。 1、7系列特点概述 Spartan-…

AWS高防贵还是阿里云高防贵

AWS和阿里云作为两大知名云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但在价格方面却存在一些差异。本文根据九河云的分析将对AWS和阿里云的高防护服务进行比较&#xff0c;以帮助用户更好地选择适合自己需求的服务。 首先&#xff0c;AWS的高防护服务主要以A…

界面控件DevExpress WinForms启动界面组件,让你的应用更个性化!

DevExpress WinForms的启动界面组件能帮助用户为WinForms应用程序创建令人惊叹的应用启动屏幕、覆盖和等待窗体等。 DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用…

文本三剑客之首awk

awk 文本三剑客最后一个命令 grep 查 sed 增删改查 主要增和改 awk 按行去列 awk默认的分隔符&#xff1a;空格&#xff0c;tab键&#xff0c;多个空格自动压缩成一个。 awk的工作原理&#xff1a;根据指令信息&#xff0c;逐行的读取文本内容&#xff0c;然后按照条件进…

筛斗数据:数据提取技术,让信息海洋变得有序

在数字化时代&#xff0c;信息如同浩渺的海洋&#xff0c;源源不断地涌入我们的生活和工作。然而&#xff0c;这个信息海洋的浩瀚与繁杂也给我们带来了挑战&#xff1a;如何在海量的数据中快速找到有价值的信息&#xff1f;数据提取技术&#xff0c;作为一种强大的工具&#xf…

内容安全复习 9 - 身份认证系统攻击与防御

文章目录 基于生物特征的身份认证系统概述基于生物特征的身份认证 人脸活体检测检测方法未解决问题 基于生物特征的身份认证系统概述 作用&#xff1a;判别用户的身份、保障信息系统安全。 是识别操作者身份的过程&#xff0c;要保证其物理身份&#xff08;现实&#xff09;…

白银价格行情分析兼顾基本面和技术面

许多投资者在进行白银交易时都非常喜欢看技术指标和技术分析。他们浏览不同的网站&#xff0c;看各种各样的白银行情分析信息。网上的白银分析信息网站非常的多&#xff0c;讲解白银交易技巧的书籍也数不胜数&#xff0c;有翻译国外的&#xff0c;也有国人自己编写的。有的讲的…

在线朋友圈系统(Java Web)

本项目是一个基于Java Web技术栈开发的在线朋友圈系统&#xff0c;提供用户注册、登录、动态发布与评论、好友发现与管理等功能。通过Spring Boot、MySQL、MyBatis、Sa-token以及LayUI等技术实现&#xff0c;确保系统具有良好的性能和扩展性。 技术栈 后端技术 Spring Boot: …

全自动搭建定制化深度学习模型

EasyDL 服务自动化生成与部署 EasyDL 定制化训练和服务平台基于百度业界领先算法&#xff0c;旨在为用户量身定制业务专属 AI 模型。通过灵活的配置&#xff0c;用户可以将模型发布为公有云 API、设备端离线 SDK、本地服务器部署包、软硬一体方案等多种输出方式的 AI 服务。目…

html--报销单

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>表格 - 脚本之家</title><style>table{width: 950px;text-align: center;/* 表边框合并 两个单元格之间的边框进行合并 */border-collapse: collapse;margi…

MySQL集群高可用架构之双主双活+keepalived

该教程再linux系统下 从部署单台mysql -->到部署两台双主mysql-->再到安装keepalived-->整体测试 从而实现mysql双主双活高可用的目标。 改文档由本人亲自部署搭建一步一步编写而来&#xff0c;实属不易&#xff0c;如对您有所帮助&#xff0c;请收藏点个赞&#x…

【linux】TCP交流状态变迁及一些函数调用

代码 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/50bb00d844b9423c9bacf44d9b06604fab941686 https://gitee.com/r77683962/linux-6.9.0/raw/50bb00d844b9423c9bacf44d9b06604fab941686/dmesg_log/kern_tcp_with_state.log 从打印的日志&#xff0c;…

类的默认成员函数——拷贝构造函数

1.概念引入 在现实生活中&#xff0c;如果有两个兄弟长得一模一样&#xff0c;我们就称其为双胞胎 当我们创建了一个新的对象&#xff0c;需要用同类型的对象拷贝并初始化&#xff0c;就要用到拷贝构造函数 拷贝构造函数&#xff1a;只有单个形参&#xff0c;该形参是对本类类…

mybatis-plus高级功能之实现自定义通用方法

前言 MP在一开始就给大家提供了很多通用的方法&#xff0c;在DefaultSqlInjector这个类中&#xff0c;在MethodList这个集合当中包含的都是通用方法类&#xff0c;如果想要使用自定义通用方法&#xff0c;也需要添加到这个集合当中。 public class DefaultSqlInjector extends…

JavaScript学习笔记(三)

19、JavaScript 数组排序 19.1 数组排序&#xff1a;sort() sort() 方法以字母顺序对数组进行排序&#xff1a; <p id"demo"></p><script>var cars01 ["Apple", "City", "Dog", "Bad"];document.getEl…

《梦醒蝶飞:释放Excel函数与公式的力量》 5.2VLOOKUP函数

第二节 5.2VLOOKUP函数 HLOOKUP函数&#xff1a;水平查找的能手&#xff0c;在Excel中&#xff0c;HLOOKUP函数&#xff08;Horizontal Lookup的缩写&#xff09;是执行水平查找的函数&#xff0c;它允许你根据一个关键值在表格的第一行中查找&#xff0c;并返回同一列中另一个…