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获取网络数据并生成Excel表格
Mar 31 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
nodejs中模块定义实例详解
Mar 18 NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 NodeJs
NodeJS实现微信公众号关注后自动回复功能
May 31 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodejs图片处理工具gm用法小结
Dec 12 NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
php 方便水印和缩略图的图形类
2009/05/21 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
JavaScript十大取整方法实例教程
2020/12/03 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
Python深入学习之特殊方法与多范式
2014/08/31 Python
Python实时获取cmd的输出
2015/12/13 Python
python中hashlib模块用法示例
2017/10/30 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
暑期实践思想汇报
2014/01/06 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
教师节演讲稿
2014/05/06 职场文书
庆祝国庆节标语
2014/10/09 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
Python初学者必备的文件读写指南
2021/06/23 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL
Python使用DFA算法过滤内容敏感词
2022/04/22 Python