node实现图片四周填充透明区域
前言
不知道你们有没有遇到这样的情况,写小程序的时候,文档里面推荐的 tabbar 图标是 81 * 81,但是实际效果图片又偏大,而且配置项也没有可调节的配置。那么怎么样解决这个问题呢?一般都是找 UI 小姐姐把 icon 四边添加透明填充来调整 icon 大小的。
但是如果没有 ui 小姐姐的情况下,我们要如何解决呢?虽然可以通过ps的批处理解决,但毕竟我们是程序猿,当然是通过代码来解决这种小问题啦。所以,闲话不多说啦,开始写我们的代码啦
简单搭建一下
新建一个
canvas-blank-area目录初始化一个
node项目工程npm init -y
安装依赖,这里主要用到了三个依赖,分别是
处理图片、批量处理文件、压缩成zip文件npm i canvas glob archiver -S
是不是很眼熟,这依赖和我之前的那篇node 实现图片分割博客一模一样吗?没错,就是一摸一样,我们再次通过 canvas这个库来处理我们的小需求。
不得不说这个
canvas库真的是挺好用的。
简单的使用一下
有了上一篇我们使用canvas的经验,其实书写代码对于我们来说应该是不难了,我们看看我实现的效果:

看到这里,是不是想跃跃欲试啦,所以,我们尝试写一下我们的代码
// 创建写入流
const { createWriteStream } = require("fs");
// 获取文件名
const { basename } = require("path");
// 压缩文件
const archiver = require("archiver");
// 导入canvas库,用于裁剪图片
const { createCanvas, loadImage } = require("canvas");
// 批量获取路径
const glob = require("glob");
!(async () => {
const paths = glob.sync("./images/*");
// 压缩成zip
const archive = archiver("zip", {
zlib: { level: 9 }, // Sets the compression level.
});
// 输出到当前文件夹下的 blank-area.zip
const output = createWriteStream(__dirname + "/blank-area.zip");
archive.pipe(output);
for (let i = 0; i < paths.length; i++) {
const path = paths[i];
const image = await loadImage(path);
const { width, height } = image;
const canvas = createCanvas(81, 81);
const ctx = canvas.getContext("2d");
ctx.drawImage(image, (81 - width) / 2, (81 - height) / 2);
archive.append(canvas.toBuffer(), { name: `${basename(path)}` });
}
archive.finalize();
})();
这么一看,是不是比我们之前那个分割图片的代码简单多了,我相信小伙伴们肯定早就自己写出来啦~~
最后,跑一下我们写的程序,当前目录就会多出了一个 blank-area.zip 的压缩包,解压出来就是我们需要的图片啦
最后
感谢各位观众老爷的观看 O(∩_∩)O
node实现图片四周填充透明区域的更多相关文章
- css 如何让背景图片拉伸填充避免重复显示
如何让背景图片拉伸填充,这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改 ...
- node 裁剪图片
1.前端一般用Jcrop这个jq插件 要返回 x: 图片 x坐标 y: 图片 y坐标 w: 图片 宽度 h: 图片 高度 2.node 实现 var images = require("im ...
- 好久没发贴了,最近捣鼓了个基于node的图片压缩小网站解析。
看了下,距离上次发帖都是去年10月份的事,忙于工作的我很少跑博客园里面来玩了. 做这个小网站的初衷是 https://tinypng.com/ 这个网站有时候访问很慢,然后自己去研究了下图片压缩. 网 ...
- 图片完全填充CardView区域
在Android开发中,使用CardView来显示我们需要展示的图片,但是有时候显示出来的图片并没有填充整个CardView区域,为了让需要展示的图片填充整个CardView区域,只需要在ImageV ...
- 一个node.js图片上传显示小应用
文件结构如下: 实现的功能有: 可以通过浏览器使用. 当请求http://domain/start时,可以看到一个欢迎页面,页面上有一个文件上传的表单. 用户可以选择一个图片并提交表单,随后文件将被上 ...
- ajax+node实现图片上传
利用formData实现ajax上传图片后,保存图片到指定收藏夹,然后展示新重命名后的图片 html: <input type="file" id="uploadI ...
- node实现图片分割
前言 最近,女王大大日常找我弄图片,本来之前我一直是ps帮他弄得,后来- -,ps不能分割过长的图片,我就想想能不能通过代码来帮他实现好了. 经过我在npm搜索一番,发现没有一个纯代码层面的high ...
- C# 将透明图片的非透明区域转换成Region
以下代码实现将一张带透明度的png图片的非透明部分转换成Region输出 /// <summary> /// 根据图片得到一个图片非透明部分的区域 /// </summary> ...
- cocos2dx 背景用小尺寸图片滚动填充的方法
直接上代码 在初始化方法中添加图片: bool BackGroundLayer::init() { frameCache=CCSpriteFrameCache::sharedSpriteFrameCa ...
- leetCode 116.Populating Next Right Pointers in Each Node (为节点填充右指针) 解题思路和方法
Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...
随机推荐
- 记录一次SpringBoot + Vue前后分离项目的部署流程
前言 本教程使用黑马 SpringBoot3+Vue3全套视频教程 大事件项目作为前后端代码. 前置需要: mysql jdk redis nginx linux环境 打包 前端 构建项目命令 npm ...
- termux添加ll命令
cd ~ vim .bashrc 添加如下内容 alias ll="ls -l" 保存退出 :wq source .bashrc 参考:https://www.cnblogs.co ...
- 【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)
官方教程非常长,我看了很认可,但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求.所以有了这篇文章.[写给自己看的,里面半句废话的解释都没有,如果看不懂的话直接看官方教程再看我的] 我是 ...
- HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM)
HMM (隐马尔可夫) 推导 (下) - 参数估计 (EM) 回顾 HMM 上篇介绍了HMM这样的一种时序类模型, 即描述了一些观测现象的产生, 是由我们很难观测到的 "隐变量因子" ...
- FastAPI与Alembic:数据库迁移的隐秘艺术
title: FastAPI与Alembic:数据库迁移的隐秘艺术 date: 2025/05/13 02:02:31 updated: 2025/05/13 02:02:31 author: cmd ...
- 汇编语言笔记——8086&&寻址方式与指令系统
汇编语言中 语句不区分大小写,编译软件会自动识别语句 用户自定义的变量和符号必须区分大小写. 8086 1.寄存器 cpu在访问存储器时,必须指明: 段寄存器:所访问的存储单元属于哪个段 偏移量:相应 ...
- 记一次burp抓不到包的排查与处理
一次遇到了burp上奇怪的bug.访问某个页面显示 No response received from remote server , 但是使用 yakit 进行抓包之后发现网站可以正常抓包 ...
- Deep Learning Book在线阅读
1.Deep Learning for Anomaly Detection https://ff12.fastforwardlabs.com/
- 在java中动态执行js代码
说明 在jdk11就标注了要取消NashornScriptEngineFactory类,在jdk17正式移除,所以在17上得加入pom依赖 <dependency> <groupId ...
- 【2020.11.23提高组模拟】徒(walk) 题解
[2020.11.23提高组模拟]徒(walk) 题解 题目描述 给一个简单连通无向图,选一个点为起点,每次选一条没有走过的边走,若无则停止.问是否存在一个起点使得无论如何选择,走出来的路径一定是欧拉 ...