최근 프로젝트에서 apk 및 ipa 패키지를 구문 분석한 다음 내부 아이콘을 서버에 업로드해야 하는 필요성을 느꼈습니다.
질문
파싱 및 업로드 과정은 비교적 간단합니다. JSZip을 사용하여 apk와 ipa의 압축을 푼 다음, 내부에 있는 아이콘을 서버에 업로드합니다. 그런데 웹페이지에서 이미지를 사용할 때 문제가 발생합니다. apk에 있는 아이콘에는 문제가 없으나, ipa에서 파싱한 그림은 사파리에서는 정상적으로 표시되지만, 다른 브라우저에서는 표시되지 않습니다.
이유
Google 검색 결과 Apple이 png 이미지를 최적화한 것으로 나타났습니다. 자세한 내용은 다음 기사(보기)에서 유용한 정보를 알아볼 수 있습니다.
Apple uses PNGCursh open source library to crush png images inside iPA files。
솔루션
저는 프론트엔드 엔지니어로서 이 문제를 해결하기 위해 자바스크립트를 사용하고 싶습니다. 실제로 해외의 누군가가 이미 해결한 바 있습니다. 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
프로젝트 주소