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 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs实现遍历文件夹并统计文件大小
May 28 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 NodeJs
Nodejs回调加超时限制两种实现方法
Jun 09 NodeJs
Nodejs中使用phantom将html转为pdf或图片格式的方法
Sep 18 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
三种php连接access数据库方法
2013/11/11 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
php判断用户是否关注微信公众号
2016/07/22 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
url传递的参数值中包含&时,url自动截断问题的解决方法
2016/08/02 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
Vue自定义指令介绍(2)
2016/12/08 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
简单了解python的内存管理机制
2019/07/08 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
用python对excel查重
2020/12/07 Python
办公室前台的岗位职责
2013/12/20 职场文书
购房协议书
2014/04/11 职场文书
影子教师研修方案
2014/06/14 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
烟台的海导游词
2015/02/02 职场文书
开会通知
2015/04/20 职场文书
Python读写yaml文件
2022/03/20 Python
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
python如何将mat文件转为png
2022/07/15 Python