JS操作图片的利器:Jimp VS GM

article/2025/10/12 7:12:08

前段时间,笔者有一个项目需求,需要在一张图片上面添加文件,并另存为一张新的图片。刚开始的时候,笔者使用的是大名鼎鼎的jimp。
这里写图片描述

其功能能满足我的要求,而且其license是MIT,不依赖于第三方的可执行程序,纯粹的javascript的实现,目前有6809颗,可以说是相当于受欢迎的,而且在其里面提的任何的问题,其开发人员都会在8个小时内回复我,的的确确在功能上是非常的满意,也满足我的功能需求。比如,下面就是一个示范的代那个码,用来在一张已知的图片上添加特定的文字。

var Jimp = require('jimp');
Jimp.loadFont("C:\\nodejs\\node_modules\\jimp\\fonts\\montserrat\\montserrat-28-white\\montserrat-28-white.fnt").then(function(font) {image.print(font,24, 24, 'Hello Jim').print(font,24, 180, '08/05/2018');Jimp.loadFont("C:\\nodejs\\node_modules\\jimp\\fonts\\open-sans\\open-sans-36-white\\open-sans-36-white.fnt").then(function(font) {Jimp.loadFont("C:\\nodejs\\node_modules\\jimp\\fonts\\montserrat\\montserrat-36-white\\montserrat-36-white.fnt").then(function(font) {image.print(font, 24, 220, 'Welcome Tom')image.print(font, 24, 220, 'Welcome Peter').resize(266,139).write('target.png');});

其还支持各种自己定义的字体。按理来说,其应该功成名就,满足我的要求。但是
等项目完成之后,我才发现,其性能满足不了我的要求,因为我的项目需要在1秒内生成10张左右的带自定义字的图片;使用Jimp,每生成一张图片,要花将近1秒的时间。

后面经过研究,发现gm的效率非常的高。在1秒内完全能够同时生成10张带文字的合成图片。

其Github地址为:https://github.com/aheckmann/gm

这里写图片描述

从上面看出,其有5225个星,和Jimp得到的赞誉也是不相上下。不过,其是利用javascript调用第三方的可执行程序实现的,所以其效率当然比jimp要快一个数量级。在使用前要安装:GraphicsMagick 或者 ImageMagick

这里写图片描述

这里写图片描述

安装完之后,其代码的使用也是非常的简单,下面是其在一张已知的图片上继续添加文字的示范代码。

var fs = require('fs'), gm = require('gm');
let start=new Date().getTime();
gm('\assets\\test.png')
.stroke("#ffffff")
//.drawCircle(10, 10, 20, 10)
.font("Helvetica.ttf", 28)
.drawText(30, 20, "GMagick!")
.write("drawing.png", function (err) {console.log(err)if (!err) console.log('done');let start1=new Date().getTime();console.log("*******",start1-start)
});

是不是带也很简单简洁,不过唯一麻烦一点的就是要装一个第三方的可执行程序:GraphicsMagick 或者 ImageMagick,不过其运行的性能和效率是杠杠的。

好了,夜深了,笔者也要休息了,下次再续!


http://chatgpt.dhexx.cn/article/cxQQWEgy.shtml

相关文章

imgageJ开发【Java】

一.ImageJ简介 ImageJ是一款由NIH(National Institutes of Health,美国国家卫生研究院)发起,可用于Windows,Mac,OSX和Linux等操作系统的图像处理开元软件,ImageJ小巧,只有5MB左右,界面简洁&…

ImageIO类的使用

重点内容 (一) How to read an image from file or URL? 从本地文本读取图片 File sourceimage new File("c:\\mypic.jpg"); Image image ImageIO.read(sourceimage); 从网络上获取图片 URL url new URL("http://www.mkyong.com/image/mypic…

安装Image J 插件

1.下载imageJ,网址:https://imagej.net/Fiji/Downloads 2.解压 3.安装插件 (1)https://imagej.nih.gov/ij/plugins/index.html这个网址下载你需要的插件。打开toolsets或者tools。 ![在这里插入图片描述](https://img-blog.csd…

ImageJ工具使用简介

ImageJ工具使用简介 在以前的博文中也介绍过看Raw图的方法,自己平常也使用windows上的一些插值工具来看raw图,最近发现了一个宝贝----ImageJ,最让我惊喜的是它可以完美的在Windows以及Ubuntu中使用,避免了我抓取Raw图之后拷贝到w…

JavaSE小项目(小游戏)

JavaSE编写的小游戏 源码下载地址:https://github.com/ygsama/SmallGame 游戏名(难度) 满天星(★☆☆☆☆) 球球(★☆☆☆☆) 打字游戏(★☆☆☆☆) 汤姆猫(★★☆☆☆&#x…

JAVA小项目(6)javaSE

1 记帐本 1.1 使用技能点: 分支、循环、String的拼接 1.2 功能和效果 1.3 项目架构 public class Test {public static void main(String[] args) {while(true){System.out.println("-------欢迎使用记账系统--------");System.out.println("1.收…

java项目源码分享——适合新手练手的java项目

源码下载(实例一):jsp开发完整的博研图书馆后台管理系统,不使用框架开发的,太完美了 源码下载(实例二):javaWeb图书馆管理系统源码mysql版本 源码下载(实例三&#xff09…

java小项目 ATM机(简易版)

目录 说明 项目介绍 功能介绍 结构图 各模块代码 登录界面 服务选择界面 存取款界面 修改密码模块 转账模块 总代码 说明 简单做了一个java的ATM机项目、本项目只能作为一个简单的运行程序。因为没有学到数据库,文件等内容,没有存储功能&…

适合新手练习的 java 小项目

适合新手练习的 java 小项目 智能电话本 视频连接在下方↓ 包括源码也在下面 不要问我为什么推荐这个,因为我也只是一个新手,这个项目是纯命令行的, 不需要数据库和网页编程知识,做起来很简单,可以帮助新手巩固基础…

JavaWeb新手小项目以及源码

此项目主要实现的功能有&#xff1a; jsp连接数据库、MD5加密、验证码验证、Ajax、文件的上传与下载、session登录验证等。 先来几张截图&#xff1a; 一、首先写登录页面 login.jsp <% page language"java" import"java.util.*" pageEncoding&qu…

java小项目水果摊

介绍 刚学完java 集合和IO流&#xff0c;想做了一个简单的小项目来练手&#xff0c;于是我就运用一些基础知识做了这个水果摊。水果摊的主要功能有&#xff1a; 进货查看水果列表购买水果查看购物车结账退出 都是一些简单的功能&#xff0c;下面就来展示代码&#xff1b; …

Java个人Web小项目

JavaWeb-HTML实列开发 目录源代码链接部分效果图 目录 #1.用户列表开发 新建一个Maven项目 创建包&#xff1a;com.iflytek 在项目中 在com.iflytek.controller中新建一个类为控制器类&#xff1a;(本网址为/UserController.java) UserController.java package com.iflytek…

Java小项目(一)---超市管理系统

超市管理系统 一、使用技术二、实现功能三、运行效果图3.1 货物清单3.2 增加货物3.3 删除货物3.4 修改货物3.5 退出 四、实现的代码4.1 Good商品货物类4.2 ShoppingSystem超市管理系统测试类 一、使用技术 Java SE 二、实现功能 使用选择结构&#xff0c;循环结构&#xff0…

Java小项目另一个水果摊

文章目录 前言一、包和表截图二、源代码1.JDBC连接Mysql数据管理员界面&#xff1a;增删查改用户界面 &#xff1a;查找水果建立断开连接 2.GUI窗口界面开始选择界面用户购买水果界面管理员登录界面管理员界面 3.水果属性4.main方法 总结拒绝白嫖&#xff0c;给个三连鼓励一下吧…

JavaWeb之综合小项目

案例需求&#xff1a; 使用Java程序操作数据库&#xff0c;并把结果显示在jsp页面上。 &#xff08;这里只做查询操作&#xff0c;增删改操作类似如此&#xff09; 使用工具&#xff1a; maven&#xff0c;idea&#xff0c;tomcat&#xff0c;MySQL数据库。 使用技术&#xff1…

20个Java小项目,献给嗜学如狂的人,拿来练练手

给大家推荐一条由浅入深的JAVA学习路径&#xff0c;首先完成 Java基础、JDK、JDBC、正则表达式等基础实验&#xff0c;然后进阶到 J2SE 和 SSH 框架学习。最后再通过有趣的练手项目进行巩固。 JAVA基础 1. Java编程语言&#xff08;新版&#xff09; 2. Java进阶之设计模式…

Java面试:java小项目实例

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。 以下就是一…

java 练手小项目

学习了javaSE的基础&#xff0c;为了巩固对Java面向对象编程&#xff0c;以及java多线程编程的理解&#xff0c;使用swing 写了一个很简单的小项目&#xff0c;源码github地址: https://github.com/pythondever/swing-demo 喜欢的同学可以学习学习 整体代码流程 * 1. JFra…

javaWeb小项目

作为一个学习加Java的小白&#xff0c;非常开心能记录下自己的成长历程。技术有限&#xff0c;请见谅&#xff01; 我主要学习的是Java后端&#xff0c;当我学着做了一个web小项目之后对javaee项目也有了初步见解&#xff01; 老师说万物皆对象&#xff0c;万物皆增删改查。我的…