从gif提取所有图片

2021/6/9 12:43:26图片处理nodejs

根据此网站的灵感:https://extractgif.imageonline.co/
做了一小工具,来实现突破的提取。
原理就是调用这个网站的服务,上传图片,并下载图片。

一,安装依赖:

yarn add got form-data

二,package.json展示:

{
  "name": "png-in-gif",
  "version": "1.0.0",
  "description": "",
  "main": "index.mjs",
  "scripts": {
    "run": "node index.mjs"
  },
  "type": "module",
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "form-data": "^4.0.0",
    "got": "^11.8.2"
  }
}

三,执行文件:

import fs from 'fs'
import got from 'got'
import FormData from 'form-data'

// upload file
const form = new FormData();
form.append('files[]', fs.createReadStream('input.gif'));

let upload = await got.post('https://extractgif.imageonline.co/ajax_upload_file.php', {
    body: form
}).on('uploadProgress', progress => {
    console.log(progress)
});
let data = JSON.parse(upload.body)

// get file list from gif
let body = 'name[]=' + data.files[0].name
let fileList = await got.post('https://extractgif.imageonline.co/script.php', {
    body: body,
    headers: {
        'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'content-length': body.length
    }
})
let zip = fileList.body.match(/http[^'"]+?\.zip/)?.[0]
let zipName = zip.match(/[^=]+\.zip$/)?.[0]

// download file list
const stream = got.stream(zip)
let writeStream = fs.createWriteStream(zipName);
stream.pipe(writeStream);

writeStream.on('close', e => {
    console.log('zip completed')
})

四,执行:
将git放在项目根目录,将第七行改成自己的git文件名:input.gif

form.append('files[]', fs.createReadStream('input.gif'));
node index.mjs

过一会就会在目录下生成一个zip压缩包,里面就是每一帧图片了

五,代码开源:
https://github.com/jsoncode/png-in-gif

========================================
如果你觉得文章帮你解决了问题和疑惑,可以请作者喝杯咖啡
image.pngimage.png
支付宝扫码 微信扫码