根据此网站的灵感: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
========================================
如果你觉得文章帮你解决了问题和疑惑,可以请作者喝杯咖啡
支付宝扫码 微信扫码