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
Nov 08 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
nodejs和php实现图片访问实时处理
Jan 05 NodeJs
详解nodejs中exports和module.exports的区别
Feb 17 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodeJS服务器的创建和重新启动的实现方法
May 12 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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多维数组去掉重复值示例分享
2014/03/02 PHP
php实现mysql封装类示例
2014/05/07 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
PHP数组对象与Json转换操作实例分析
2019/10/22 PHP
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
JS之相等操作符详解
2016/09/13 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
浅析vue数据绑定
2017/01/17 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
Python单元测试框架unittest简明使用实例
2015/04/13 Python
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
python 美化输出信息的实例
2018/10/15 Python
详解小白之KMP算法及python实现
2019/04/04 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
python将unicode和str互相转化的实现
2020/05/11 Python
TensorFlow中如何确定张量的形状实例
2020/06/23 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
会计毕业生自荐信
2013/11/21 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
晚归检讨书
2014/02/19 职场文书
单位承诺书格式
2014/05/21 职场文书
职工小家建设活动方案
2014/08/25 职场文书
开除通知书范本
2015/04/25 职场文书
Go 语言中 20 个占位符的整理
2021/10/16 Golang
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript