J'ai récemment rencontré un besoin dans un projet : analyser les packages apk et ipa, puis télécharger les icônes qu'ils contiennent sur le serveur.
Question
Le processus d'analyse et de téléchargement est relativement simple. J'utilise JSZip pour décompresser l'apk et l'ipa, puis télécharger l'icône trouvée à l'intérieur sur le serveur. Cependant, le problème survient lorsque j'utilise des images dans des pages Web. Il n'y a aucun problème avec les icônes de l'apk, mais les images analysées dans l'ipa peuvent être affichées normalement dans Safari, mais ne peuvent être affichées dans aucun autre navigateur.
Raison
Après Google, j'ai découvert qu'Apple avait optimisé les images png. Veuillez lire cet article (voir) pour plus de détails. Nous pouvons apprendre quelques informations utiles dans l'article :
.Apple uses PNGCursh open source library to crush png images inside iPA files。
Solution
En tant qu'ingénieur front-end, j'espère utiliser javascript pour résoudre ce problème. En fait, quelqu'un à l'étranger l'a déjà résolu auparavant. NodeJS-PNDGefry peut le faire. Malheureusement, cela n'a pas été maintenu depuis trop longtemps et il ne peut plus fonctionner.
Je n’en ai pas trouvé de disponible, j’ai donc dû préparer moi-même suffisamment de nourriture et de vêtements et en écrire un moi-même. D'où node-pngdefry. La fonction de node-pngdefry est très claire, qui consiste à utiliser Javascript pour restaurer les images png traitées par Apple.
node-pngdefry est très simple à utiliser et prend en charge la ligne de commande et Node.js standard :
Utilisation de la ligne de commande
installer :
$ npm install -g pngdefry
puis exécutez :
$ pngdefry -i icon.png -o icon.new.png
Utilisation dans 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
Adresse du projet