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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
nodejs服务搭建教程 nodejs访问本地站点文件
Apr 07 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
nodejs利用ajax实现网页无刷新上传图片实例代码
Jun 06 NodeJs
用nodejs实现json和jsonp服务的方法
Aug 25 NodeJs
NodeJs form-data格式传输文件的方法
Dec 13 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 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中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
PHP实现合并discuz用户
2015/08/05 PHP
类之Prototype.js学习
2007/06/13 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
详解jQuery停止动画——stop()方法的使用
2016/12/14 Javascript
jQuery序列化后的表单值转换成Json
2017/06/16 jQuery
React组件之间的通信的实例代码
2017/06/27 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
下载给定网页上图片的方法
2014/02/18 Python
常见的python正则用法实例讲解
2016/06/21 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
Python列表对象实现原理详解
2019/07/01 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
详解Python 函数参数的拆解
2020/09/02 Python
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
weblogic面试题
2016/03/07 面试题
网络体系结构及协议的定义
2014/03/13 面试题
区域销售经理职责
2013/12/22 职场文书
化工专业求职信
2014/07/01 职场文书
万能检讨书
2015/01/27 职场文书
2015年国庆节慰问信
2015/03/23 职场文书
2016年教代会开幕词
2016/03/04 职场文书
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
Golang 字符串的常见操作
2022/04/19 Golang