时间:2021-05-26
在项目中遇到需要支持上传gif图片,并把其分解的帧图片一次展示给用户。话不多说直接上代码
分解gif图片需要使用libgif-js这个库!
1. 引入Git库
import SuperGif from './libgif.js'2. 分解Gif为png图片
const GifDecomposer = { structureGifObject (gifFiles, cb) { // gifFiles 获取的文件对象 e.target.files[0] const gifImg = document.createElement('img'); gifImg.setAttribute('rel:animated_src', URL.createObjectURL(gifFiles)); gifImg.setAttribute('rel:auto_play', '0'); // Modified pictures must be added to the body document.body.appendChild(gifImg); // Construction example var rub = new SuperGif({ gif: gifImg }); rub.load(() => { var img_list = []; for (let i=1; i <= rub.get_length(); i++) { // Traversing through each frame of a GIF instance rub.move_to(i); // Converting each frame of canvas into a file object let cur_file = this.convertCanvasToImage(rub.get_canvas(), gifFiles.name.replace('.gif', '') + `-${i}`) img_list.push({ file_name: cur_file.name, url: URL.createObjectURL(cur_file), file: cur_file, }) } cb(img_list) }); }, dataURLtoFile (dataurl, filename) { const arr = dataurl.split(','); const mime = arr[0].match(/:(.*?);/)[1]; const bstr = atob(arr[1]); var n = bstr.length; const u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, {type:mime}); }, convertCanvasToImage (canvas, filename) { return this.dataURLtoFile(canvas.toDataURL('image/png'), filename); }}3. 上传每一张图片
/** * costume upload GIF decomposer */ const filesImg = function (list, storage, costumeFormat, assetType, handleCostume) { let proDataList = list.map((item, index) => { return new Promise(function(resolve, reject) { let reader = new FileReader(); reader.readAsArrayBuffer(item.file); reader.onload = () => { let data = {result: reader.result, type: item.file.type, name: item.file.name} resolve(data); }; reader.onerror = (error) => {reject(error)}; }) }) Promise.all(proDataList).then(res => { res.forEach(item => { // 上传 }) }).catch(data => {console.log(data)}) }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
案例:将和当前脚本同目录下的gif图片分解成png图片,并将分解后的图片保存到pics目录下,将其从0开始命名。GIF动图的分解可以利用PIL模块的Image类
ps动图必须一帧一帧修。ps只要是动态图片,就必须是一帧一帧的,否则各种聊天软件用不了。而且PS是不能直接打开多帧的GIF的。 AdobePhotoshop,
cad分解快捷键是“x”,分解命令常被叫成“explode炸开”,可以把多线段、矩形、块、面域分解成为线组成的图形,可以把实体分解成为面域,再次分解就变成线组成
cad分解快捷键是“x”,分解命令常被叫成“炸开”,可以把多线段、矩形、块、面域分解成为线组成的图形,可以把实体分解成为面域,再次分解就变成线组成的图形了,这个
cad拆分快捷键是“x”,分解命令常被叫成“炸开”,可以把多线段、矩形、块、面域分解成为线组成的图形,可以把实体分解成为面域,再次分解就变成线组成的图形了,这个