私は最近、プロジェクトで apk および ipa パッケージを解析し、内部のアイコンをサーバーにアップロードするというニーズに遭遇しました。
質問
解析とアップロードのプロセスは比較的簡単です。JSZip を使用して apk と ipa を解凍し、その中にあるアイコンをサーバーにアップロードします。ただし、Web ページで画像を使用するときに問題が発生します。 apk内のアイコンは問題ないのですが、ipa内で解析した画像がsafariでは正常に表示されるのですが、他のブラウザでは表示できません。
理由
Google に続いて、Apple が PNG 画像を最適化していることがわかりました。詳細については、この記事 (表示) を参照してください。
の記事でいくつかの有益な情報が得られます。Apple uses PNGCursh open source library to crush png images inside iPA files。
解決策
私はフロントエンドエンジニアとして、JavaScript を使ってこの問題を解決したいと考えています。実際、NodeJS-PNGDefry は既に海外の誰かによって解決されていますが、残念ながら、これはあまりにも長い間メンテナンスされておらず、もう実行できません。
入手可能なものが見つからなかったので、自分で十分な食べ物と衣服を作り、自分で書かなければなりませんでした。したがって、node-pngdefryになります。 node-pngdefry の機能は非常に明確で、JavaScript を使用して Apple によって処理された PNG 画像を復元することです。
node-pngdefry は非常に使いやすく、コマンドラインと通常の Node.js をサポートしています。
コマンドラインの使用法
インストール:
$ npm install -g pngdefry
次に、次を実行します:
$ 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'); });
テスト
$ npm test
プロジェクトアドレス