Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nodejs 图片处理工具 gm 的使用!

nodejs 图片处理工具 gm 的使用!

作者头像
一枚小工
发布于 2020-07-22 08:38:18
发布于 2020-07-22 08:38:18
1.6K00
代码可运行
举报
文章被收录于专栏:Cocos Creator开发Cocos Creator开发
运行总次数:0
代码可运行

环境要求

1. 安装 GraphicsMagick

下载地址:

http://www.graphicsmagick.org/

2. 安装 ImageMagic

下载地址:

https://imagemagick.org/index.php

3. 安装 gm

直接命令行安装: npm install --save gm

环境变量配置

GraphicsMagick 和 ImageMagic 安装完以后,需要把对应执行文件所在目录添加到环境变量,如下图所示。

实现切割逻辑

读取大图对应的数据文件(我这里用到的是 json 文件,其他格式的,可以根据实际格式修改对应逻辑),获取大图的,根据数据信息,读取对应位置和大小的图片,保存到本地即可,裁剪图片主要用下面的方法进行实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gm('png图片路径')
    .crop(width, height, x, y)
    .write(`碎图保存路径`, err => {
        if(err != null){
            console.log(err);
        }
    }
);

下图是实现时选择的大图对应 atlas 数据文件,格式化后的样式。

上图可以看出来,取出 frames 内的所有图片信息,就可以在大图内裁剪每张图片了,图片的名字同时也能获取得到。

具体实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var gm = require('gm');
var fs = require('fs');
const { createCipher } = require('crypto');

var atlasname = '';
var pngname = '';
var filepath = '';

process.stdout.write('please enter filename:\n');
process.stdin.on('data', e => {
    let str = e.toString();
    str = str.substring(0, str.indexOf('\r'));
    filepath = `./pic/${str}`;
    atlasname = `${filepath}.atlas`;
    pngname = `${filepath}.png`;

    fs.mkdirSync(filepath);
    let data = fs.readFileSync(atlasname);
    let json = JSON.parse(data.toString());

    for(var key in json.frames){
        console.log(`${key}`);
        var frame = json.frames[key].frame;
        gm(pngname)
            .crop(frame.w, frame.h, frame.x, frame.y)
            .write(`./${filepath}/${key}`, err => {
                if(err != null){
                    console.log(err);
                }
            }
        );
    }
});

上图是按照自己方便获取图片的格式进行的实现,可以根据自己的需要,进行逻辑修改即可,还可以添加批量处理。

上图是裁剪前的大图,下图是裁剪后成张的碎图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一枚小工 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
node操作gm进行图像基本操作
上一篇介绍了GraphicsMagick的简单使用,这一批使用node结合gm处理一些图像的简单操作!
十月梦想
2018/08/29
7580
对象储存cos-腾讯云对象储存cos
COS是腾讯云提供的对象存储服务,功能非常强大,可以作为文件服务器,CDN加速,静态网页服务,还提供了图片的常用操作。
张天华
2019/08/01
24.5K0
对象储存cos-腾讯云对象储存cos
nodejs图片裁剪、缩放、水印
该文介绍了如何使用Node.js库和GraphicsMagick来对图片进行裁剪、缩放、添加水印以及格式转换。其中包括了各种Node.js库和API的用法,如gm、node-canvas、node-imagemagick等,并提供了示例代码。
用户1141560
2017/12/26
6.3K0
nodejs实现批量修改文件内容 | 附断更红包
一番之前不是有一个网站吗,efonfihgint.imwork.net。但这是个二级域名,很多时候用起来不方便,自主性还是稍差了一点。
efonfighting
2020/02/21
4K0
nodejs实现批量修改文件内容 | 附断更红包
im4java + imagemagic 搭建一个图片处理服务
imagemagic + im4java 进行图片处理 利用 imagemagic 对图片进行处理,java工程中,使用im4java来操作imagemagic的api 一、环境 how to i
一灰灰blog
2018/02/06
1.9K0
【Koa】385- koa框架的快速入门与使用
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
pingan8787
2019/10/23
5800
用node撸一个简单的爬虫
一提起爬虫可能大家就会觉得很高大上,就会想起python.呵呵,我们今天偏偏就要颠覆大家的认知,用node不到100行代码擼一个简单的爬虫。天天python,我决定换下口味。
润森
2019/08/30
6930
四、node服务器搭建
静态服务器实现与读取网页返回几乎一致,通过request.url可以获取用户访问的路径。
Dreamy.TZK
2020/07/06
2K0
四、node服务器搭建
nodejs基础-HTTP
步骤: 1,加载http模块 2.创建http服务 3、为http服务对象添加request事件处理程序 4·开启http服务监听,准备接收客户端请求 注意: 1,浏览器显示可能是乱码,所以可以通过.res.setHeader("Content-Type", 'text/plain; charset=utf-8');设置浏览器显示时所使用的编码. 2. Chrome浏览器默认无法手动设置编码,需要安装"Set Character Encoding"扩展. 3,演示一下设置Content-Type-text/html'和"Content-Type-text/plain的区别.
eadela
2019/09/29
5400
nodejs基础-HTTP
使用noode.js创建一个服务器
打开gitbash,切换到js文件当前的文件夹,然后输入node index.js(index.js是我的js文件名,反正你们取什么名就输入啥名)
bamboo
2019/01/29
1.6K0
使用noode.js创建一个服务器
在 NodeJS 中玩转 Protocol Buffer
作者:link Protocol Buffer入门教程 Protocol Buffer是个什么鬼? Protocol Buffer(下文简称protobuf)是Google提供的一种数据序列化协议,下
腾讯IVWEB团队
2017/03/13
5.3K0
【Nodejs】240-有助于理解前端工具的 node 知识
缘起 平时写惯了业务代码之后,如果想要了解下 webpack 或者 vue-cli,好像是件很难上手的事情? 。拿 webpack 来说,我们可能会对配置熟悉点,但常常一段时间过后又忘了,感觉看起来不
pingan8787
2019/07/25
4790
【Nodejs】240-有助于理解前端工具的 node 知识
构建vscode的vue组件代码补全插件以及上传
  我们需要做的就是把每一个组件的信息拿出来,按snippet的格式输入到snippet.json文件中去,如何从组件库中提取每一个组件对应的props呢,当然不是手工收集这种蠢蠢的方式,程序员的方式当然是用代码工具避免重复劳动。我的想法是写一个工具方法从组件中获取props,然后在node环境中执行,并生成最终的snippet.json文件。我们知道require一个模块时,会返回到export中的对象,这样就能拿到props了。
全栈程序员站长
2022/07/21
1.7K0
加快 Vue 项目的开发速度
Webpack是实现我们前端项目工程化的基础,但其实她的用处远不仅仅如此,我们可以通过Webpack来帮我们做一些自动化的事情。首先我们要了解require.context()这个API
grain先森
2019/03/29
7340
加快 Vue 项目的开发速度
新浪微博 OAuth2 NodeJs发微博
想用nodejs写个微博客户端发微博,无奈新浪微博的nodejs sdk是OAuth1.0的。 只能自己根据OAuth1.0 改了改。 只写了statuses/update 和 statuses/upload,其他的实现基本都类似了。 update是简单参数的post,upload是multipart 包含二进制图片的post。 改改帐号参数和发送的图片路径,node weibotest.js就能成功发送了。 如果中文出现乱码,请把这两个js文件保存成utf-8编码。 weibo.js
井九
2024/10/12
920
nodejs实现简单的自动约车
最近约车真是越来越难了,网上约车经常车位刚放出来便已空空如也。突然回想起之前学车时教练反复提到的约车软件,去淘宝上一查:我去,卖出去一千多份了!还能约到车那就是有鬼了……此刻我深深怀疑这个软件是他们自家开发的,贵圈水真深。然而作为一名程序猿的尊严是不允许我去买这软件的……于是花了一天捣鼓出来一个极其简陋的约车系统,虽然因为官方网站对这方面的限制很多,效果并不是很好,不过试用了一下淘宝的爆款约车软件基本确定原理相同,那么就满足了吧……(挽尊可矣)
星回
2018/08/02
1.1K0
35·灵魂前端工程师养成-使用nodejs实现简单nginx功能
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/10/31
6350
35·灵魂前端工程师养成-使用nodejs实现简单nginx功能
【NodeJS】归纳篇(一)数据请求
前端修罗场
2023/10/07
2110
使用NodeJS 搭建静态服务器
解析URL需要用到Node.js提供的url模块,它使用起来非常简单,通过parse()将一个字符串解析为一个Url对象:
九旬
2020/10/23
2K0
使用NodeJS 搭建静态服务器
我的写作工具链
1)源文件持续修改中出现的回归编辑工作,互相引用的链接较多
RiboseYim
2018/01/24
1.1K0
我的写作工具链
相关推荐
node操作gm进行图像基本操作
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验