Created
January 31, 2015 14:23
-
-
Save idealhack/fa76498ababd9f12bf69 to your computer and use it in GitHub Desktop.
Read and Write PNG in Binary
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// PNG 格式定义 | |
// http://dev.gameres.com/Program/Visual/Other/PNGFormat.htm | |
var fs = require('fs'); | |
// 测试文件 | |
var FILE_IN = 'in.png' | |
, FILE_OUT = 'out.png'; | |
var out = ''; | |
// 标识符、区块 | |
var SIGNATURE = '89504e470d0a1a0a' | |
, SIGNATURE_POSITION = 0 | |
, IHDR = '49484452' | |
, IHDR_POSITION = 0 | |
, IHDR_LENGTH = 0 | |
, IHDR_SEGMENT = '' | |
, IDAT = '49444154' | |
, IDAT_POSITION = 0 | |
, IDAT_LENGTH = 0 | |
, IDAT_SEGMENT = '' | |
, IEND = '0000000049454e44ae426082' | |
, IEND_POSITION = 0; | |
// 读文件 | |
fs.readFile(FILE_IN, function (err, data) { | |
if (err) throw err; | |
var h = data.toString('hex'); | |
// 读取块 | |
SIGNATURE_POSITION = h.indexOf(SIGNATURE); | |
IHDR_POSITION = h.indexOf(IHDR); | |
IHDR_LENGTH = parseInt(h.substring(IHDR_POSITION - 8, IHDR_POSITION), 16); | |
IHDR_SEGMENT = h.substring(IHDR_POSITION - 8, IHDR_POSITION + 8 + IHDR_LENGTH * 2 + 8); | |
IDAT_POSITION = h.indexOf(IDAT); | |
IDAT_LENGTH = parseInt(h.substring(IDAT_POSITION - 8, IDAT_POSITION), 16); | |
IDAT_SEGMENT = h.substring(IDAT_POSITION - 8, IDAT_POSITION + 8 + IDAT_LENGTH * 2 + 8); | |
IEND_POSITION = h.indexOf(IEND); | |
// 生成块 | |
out += SIGNATURE; | |
out += IHDR_SEGMENT; | |
out += IDAT_SEGMENT; | |
out += IEND; | |
outBuffer = new Buffer(out, 'hex'); | |
// 写文件 | |
fs.writeFile(FILE_OUT, outBuffer, function (err) { | |
if (err) throw err; | |
console.log('OK'); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment