本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦。”
1.gif (428.09 KB, 下载次数: 1202)
下载附件 保存到相册
6 年前 上传
2.gif (216.76 KB, 下载次数: 1200)
1.gif (484.24 KB, 下载次数: 1215)
2.gif (21.88 KB, 下载次数: 1254)
3.gif (1.45 MB, 下载次数: 1223)
4.gif (1.38 MB, 下载次数: 1231)
5.gif (749.79 KB, 下载次数: 1232)
1.jpg (10.73 KB, 下载次数: 1213)
2.jpg (8.03 KB, 下载次数: 1163)
3.jpg (24.78 KB, 下载次数: 1147)
4.gif (194.61 KB, 下载次数: 1254)
gifsicle -I snowball.gif > snowball.txt
5.gif 19 images logical screen 200x196 global color table (128) background 93 loop forever extensions 1 + image #0 200x196 transparent 93 disposal asis delay 0.04s + image #1 200x188 transparent 93 disposal asis delay 0.04s ........
5.jpg (100.64 KB, 下载次数: 1175)
6.jpg (43.04 KB, 下载次数: 1189)
gifsicle --colors=64 5.gif > 5-64.gif gifsicle --colors=32 5.gif > 5-32.gif gifsicle --colors=16 5.gif > 5-16.gif gifsicle --colors=2 5.gif > 5-2.gif ......
7.gif (180.53 KB, 下载次数: 1289)
8gif.gif (152.54 KB, 下载次数: 1222)
9.gif (126.63 KB, 下载次数: 1239)
10.gif (71.04 KB, 下载次数: 1199)
1.gif (20.12 KB, 下载次数: 1214)
2.jpg (10.93 KB, 下载次数: 1234)
3.gif (22.22 KB, 下载次数: 1247)
4.gif (278.12 KB, 下载次数: 1164)
gm convert source.gif target_%d.gif
5.jpg (48.8 KB, 下载次数: 1191)
6.jpg (22.49 KB, 下载次数: 1263)
7.jpg (16.47 KB, 下载次数: 1234)
8.jpg (13.15 KB, 下载次数: 1192)
9.jpg (23.48 KB, 下载次数: 1270)
10.jpg (16.28 KB, 下载次数: 1173)
1.gif (428.09 KB, 下载次数: 1179)
2.gif (140.7 KB, 下载次数: 1340)
3.gif (106.64 KB, 下载次数: 1207)
gm convert -coalesce source.gif target_%d.gif gifsicle --unoptimize source.gif > target.gif
4.jpg (83.06 KB, 下载次数: 1262)
gm identify -verbose source.gif gifsicle -I source.gif
frame<8 gap=1 9<frame<20 gap=2 21<frame<30 gap=3 31<frame<40 gap=4 frame>40 gap=5
const {spawn} = require('child_process'); const image = gm("src2/"+file) image.identify((err, val) => { if(!val.Scene){ console.log(file+" has err:"+err) return } let frames_count = val.Scene[0].replace(/\d* of /, '') * 1 let gap = countGap(frames_count) let delayList = []; let totaldelay = 0 if(val.Delay!=undefined){ let iii for (iii = 0; iii < val.Delay.length; iii ++) { delayList[iii] = val.Delay[iii].replace(/x\d*/, '') * 1 totaldelay+=delayList[iii] } for (; iii < val.Scene.length; iii ++) { delayList[iii] = 8 totaldelay+=delayList[iii] } }else{ for (let iii = 0; iii < val.Scene.length; iii ++) { delayList[iii] = 8 totaldelay+=delayList[iii] } } let totalFrame = parseInt(frames_count/gap) //判断是否速度过慢,需要进行归一加速处理 if(totaldelay/totalFrame>20){ let scale =(totalFrame*1.0*20)/totaldelay for (let iii = 0; iii < delayList.length; iii ++) { delayList[iii] = parseInt(delayList[iii] * scale) } } let params=[] params.push("--colors=255") params.push("--unoptimize") params.push("src2/"+file) let tempdelay = delayList[0] for (let iii = 1; iii < frames_count; iii ++) { if(i%gap==0){ params.push("-d"+tempdelay) params.push("#"+(iii-gap)) tempdelay=0 } tempdelay += delayList[iii] } params.push("--optimize=3") params.push("-o") params.push("src2/"+file+"gap-keepdelay.gif") spawn("gifsicle", params, { stdio: 'inherit' }) })
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
引用:weibin_soft 发表于 2018-10-31 15:18 厉害了
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.155264 second(s), 47 queries , Gzip On.