nodejs修复ipa处理过的png图片


Posted in NodeJs onFebruary 17, 2016

最近做项目遇到一个需求:解析apk和ipa包,然后把里面的icon上传到服务器。

问题

解析上传过程比较简单,我使用JSZip对apk和ipa进行解压,然后把找到里面的icon上传到服务器。但是,当我在网页中使用图片时,问题出现了。对于apk中的icon,没有任何问题,但是对于ipa中解析出来的图片,在safari中可以正常显示,在其他任何浏览器去无法显示。

原因

Google后发现,是苹果对png图片进行了优化处理,具体看这篇文章(查看),在文章中我们可以了解到一些有用信息:

Apple uses PNGCursh open source library to crush png images inside iPA files。

解决方案

作为一个前端工程师,我希望用javascript解决这个问题。其实之前国外已经有人去解决了,NodeJS-PNGDefry就是可以,可惜这个太久没维护,已经跑不起来。

找不到可用的,我只能自己动手丰衣足食,自己写一个。因此有了node-pngdefry。node-pngdefry的功能很明确,就是用Javascript来还原被苹果处理过的png图片。

node-pngdefry用法很简单,支持命令行和常规的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

项目地址

node-pngdefry

NodeJs 相关文章推荐
轻松创建nodejs服务器(6):作出响应
Dec 18 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
配置nodejs环境的方法
May 13 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 #NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 #NodeJs
Nodejs中session的简单使用及通过session实现身份验证的方法
Feb 04 #NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 #NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 #NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 #NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 #NodeJs
You might like
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
EasyUI实现第二层弹出框的方法
2015/03/01 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
JQuery复制DOM节点的方法
2015/06/11 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
JavaScript使用readAsDataURL读取图像文件
2017/05/10 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
深入讲解Java编程中类的生命周期
2016/02/05 Python
Python实现随机选择元素功能
2017/09/14 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Python内置异常类型全面汇总
2020/05/28 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
C++是不是类型安全的
2014/02/18 面试题
铲车司机岗位职责
2014/03/15 职场文书
个人承诺书
2014/03/26 职场文书
师德师风剖析材料
2014/09/30 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
实习单位指导教师评语
2014/12/30 职场文书
学生保证书
2015/01/16 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
Redis数据同步之redis shake的实现方法
2022/04/21 Redis