最近做項(xiàng)目遇到一個(gè)需求:解析apk和ipa包遇绞,然后把里面的icon上傳到服務(wù)器蕊肥。
問(wèn)題
解析上傳過(guò)程比較簡(jiǎn)單膘茎,我使用JSZip對(duì)apk和ipa進(jìn)行解壓漆弄,然后把找到里面的icon上傳到服務(wù)器宋彼。但是弄砍,當(dāng)我在網(wǎng)頁(yè)中使用圖片時(shí)仙畦,問(wèn)題出現(xiàn)了。對(duì)于apk中的icon音婶,沒(méi)有任何問(wèn)題慨畸,但是對(duì)于ipa中解析出來(lái)的圖片,在safari中可以正常顯示衣式,在其他任何瀏覽器去無(wú)法顯示寸士。
原因
Google后發(fā)現(xiàn),是蘋果對(duì)png圖片進(jìn)行了優(yōu)化處理碴卧,具體看這篇文章(查看)弱卡,在文章中我們可以了解到一些有用信息:
Apple uses PNGCursh open source library to crush png images inside iPA files。
解決方案
作為一個(gè)前端工程師住册,我希望用javascript解決這個(gè)問(wèn)題婶博。其實(shí)之前國(guó)外已經(jīng)有人去解決了,NodeJS-PNGDefry就是可以荧飞,可惜這個(gè)太久沒(méi)維護(hù)凡人,已經(jīng)跑不起來(lái)。
找不到可用的叹阔,我只能自己動(dòng)手豐衣足食挠轴,自己寫(xiě)一個(gè)。因此有了node-pngdefry条获。node-pngdefry的功能很明確忠荞,就是用Javascript來(lái)還原被蘋果處理過(guò)的png圖片。
node-pngdefry用法很簡(jiǎn)單帅掘,支持命令行和常規(guī)的Node.js:
命令行用法
install:
$ npm install -g pngdefry
** then run:**
$ pngdefry -i icon.png -o icon.new.png
在Node.js中使用
$ npm install pngdefry --save-dev
var pngdefry = require('pngdefry');
var path = require('path');
var input = path.join(__dirname, 'icon.png');
var output = path.join(__dirname, 'icon.new.png');
pngdefry(input, output, function(err) {
if (err) {
return;
}
console.log('success');
});
Test
$ npm test
項(xiàng)目地址
感謝
最后感謝上面提到的文章的作者Jongware委煤。