首页 > 编程语言 >nodejs 基于sharp + smartcrop 实现图片的智能提取排版

nodejs 基于sharp + smartcrop 实现图片的智能提取排版

时间:2023-11-29 11:36:48浏览次数:40  
标签:nodejs top smartcrop input sharp 图片 left

属于一个简单的demo 示例,主要是学习下sharp 包对于图片的处理,以及基于smartcrop.js 实现智能图片抠图
结合sharp提供的图片组合能力,实现一个基于模版的图片组合,代码很简单

简单任务描述

就是有一个图片,我们需要智能的提取核心信息,并生成一个确定大小的图片,然后基于将生成的图片填充到一个模版图片中
实现类似日常中大家的一寸照片生成效果

  • 参考代码
    package.json

 


{
  "name": "nodejs-images-sharp",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "sharp": "^0.32.6",
    "smartcrop-sharp": "^2.0.8"
  }
}
"name": "nodejs-images-sharp",


utils.js 一个简单的工具类,利用了smartcrop-sharp 进行图片的智能提取并转换为一个标准大小的图片

const sharp = require('sharp');
const util = require('./utils')
 
async function templateImage(source, width, height, output) {
    let smartcrop = await util.applySmartCrop(source, width, height)
    let items = [
        {
            input: smartcrop,
            top: 25,
            left: 25,
        },
        {
            input: smartcrop,
            top: 25,
            left: 340,
        },
        {
            input: smartcrop,
            top: 25,
            left: 655,
        },
        {
            input: smartcrop,
            top: 360,
            left: 25,
        },
        {
            input: smartcrop,
            top: 360,
            left: 340,
        },
        {
            input: smartcrop,
            top: 360,
            left: 655,
        },
        {
            input: smartcrop,
            top: 700,
            left: 25,
        },
        {
            input: smartcrop,
            top: 700,
            left: 340,
        },
        {
            input: smartcrop,
            top: 700,
            left: 655,
        }
    ];
    sharp("template.png").composite(items)
        .toFile(output)
}
 
templateImage("v3.png", 283, 300, "output.png")
const smartcrop = require('smartcrop-sharp');

效果

实际图片是一个非规则,长度比较大的图片

nodejs 基于sharp + smartcrop 实现图片的智能提取排版_模版

模版填充效果

nodejs 基于sharp + smartcrop 实现图片的智能提取排版_模版_02

说明

实际上sharp 也包含一个简单的智能裁剪方法,但不是很好,不如smartcrop-sharp,所以利用几个工具的集成,可以实现一个相对可靠的智能裁剪,以及模版填充,当然也可以自己集合业务处理加上智能裁剪进行原始图片的处理(比如用户选择需要裁剪的部分图片,然后再利用库进行一些处处理,同时也可以添加一些其他抠图算法),实现更加灵活的图片处理

参考资料

https://github.com/lovell/sharp
https://github.com/libvips/libvips
https://github.com/jwagner/smartcrop.js
https://sharp.pixelplumbing.com/api-composite
https://github.com/jwagner/smartcrop-sharp
https://github.com/rongfengliang/sharp_smartcrop_learning

标签:nodejs,top,smartcrop,input,sharp,图片,left
From: https://blog.51cto.com/rongfengliang/8612827

相关文章

  • vue2和vue3项目并存时,下载nvm管理nodejs
    1、下载nvm  1)下载一个1.19版本以上的nvm,在执行“npminstall”时报错“npmERR!Unexpectedtoken'.'”。。https://blog.csdn.net/qq_25286361/article/details/1328999372)在nvm/setting.txt中,加入node_mirror:https://npm.taobao.org/mirrors/node/......
  • 通过npm安装nodejs
    npm(NodePackageManager)是Node.js的包管理器,可以让开发人员更方便地安装、上传、管理和共享代码包。而要使用npm,当然就需要先安装Node.js,下面就来讲讲如何通过npm安装nodejs。在Windows上安装nodejs,可以直接下载Node.js的安装包,然后双击运行即可。然而,在macOS......
  • npm学习(十五)之理解npm、nvm、nodejs之间的关系
      nvmnvm:nodeJs版本管理工具,管理nodejs版本和npm版本,使用nvm安装nodejs时会将npm一起安装下来nodejsnodeJs: 一种高效的JavaScript运行环境npmnpm:是随同nodeJs一起安装的包管理工具,npm管理对应nodeJs的第三方插件  常见的使用场景有以下几种:  .允许用户从......
  • yarn : 无法加载文件 C:\Program Files\nodejs\yarn.ps1,因为在此系统上禁止运行
    问题分析:这个错误提示说明在电脑系统上禁止运行PowerShell 脚本,因此导致无法加载Yarn的安装脚本。这是由于系统的执行策略(ExecutionPolicies)设置所导致的。解决方法:1.以管理员身份运行PowerShell。2.在窗口中执行 set-ExecutionPolicyRemoteSigned。3.执行完成后,......
  • SkiaSharp库在NetCore下跨平台图片操作基础使用方法
    SkiaSharp库在NetCore下跨平台图片操作基础使用方法:在跨平台开发中,处理图片是一项常见的需求。而SkiaSharp库是一个强大的工具,它提供了在NetCore平台下进行跨平台图片操作的能力。本文将介绍SkiaSharp库在NetCore下的基础使用方法,以及逐步深入的高级功能。什么是SkiaSharp?SkiaS......
  • NetCore使用SkiaSharp库对给定路径的图片进行大小缩放,要适当考虑等比率缩放,以高度为准
    SkiaSharp库是跨平台的2D图片操作库,在夸平台方面比较稳定,且支持常用的“windows操作”:缩放,剪裁,格式转换等。例如:如果要按照原始图片高度为准,自动调整宽度进行等比例缩放,可以根据以下步骤使用SkiaSharp库进行操作:导入SkiaSharp命名空间:usingSkiaSharp;加载原始图像:str......
  • CSharp: vs 2022
    package.json {"name":"healthcheck","version":"0.0.0","scripts":{"ng":"ng","start":"echoStarting...&&ngserve","build&......
  • bytenode nodejs 字节码编译工具
    bytenode是一个nodejs字节码编译工具,可以用来实现nodejs代码的一些加密简单使用安装目前推荐安装为cli全局模式,我使用npmscript不成功 sudonpminstall-gbytenode简单代码app.js定义一个模块 module.exports={name:"dalong",age:333}编译bytenode--compileapp.j......
  • nexe nodejs 应用打包工具
    nexe是类似pkg的一个nodejs应用打包工具支持的特性自包含可以用来运行多nodejsrumtime不依赖node以及npm构建幂等启动以及部署方便跨平台参考使用安装npminexe-g简单代码app.js console.log("demoapp")构建nexeapp.js说明nexe使用还是比较简单的,灵活性也很不错,值得试......
  • piscina nodejs woker 线程池实现
    nodejs线程池工具还是很多的,piscina是一个比较活跃的项目包含的特性快速包含了固定以及可变任务场景支持灵活的线程池大小异步追踪支持取消支持支持comonj,esm,以及ts自定义任务队列linux系统上可选的cpu调度支持参考使用app.jsconstpath=require('......