投稿者 tel | 2013年8月11日

Node.jsでパレットつきのPNGを出力する

Node.jsでパレットつき、つまりインデックスカラーのPNGが出力できないか調べた。

パレットに対応していそうなモジュールはImageMagickを使うものしかなさそうだった。

ImageMagickを使うのもオーバースペックな気がしたので、
フルカラーのPNGの出力ができるモジュールをフォークしてインデックスカラーで保存できるようにした。

var fs = require('fs'),
	Base64 = require('./base64.js').Base64,
	image = require('./hiyoko.json'),
	PNG = require('pngjs').PNG;

var index = Base64.decode(image.index),
	palette = Base64.decode(image.palette);

var img = new PNG({
	width: image.width,
	height: image.height,
	colorType: 3,
	filterType: 0,
});

// RGBA -> RGB
palette = palette.filter(function(e, i) {
	return i % 4 !== 3;
});

img.data = new Buffer(index);
img.palette = new Buffer(palette);
img.pack().pipe(fs.createWriteStream('out.png'));

こんなふうにしてインデックスとパレットのデータからPNGを出力できた。

out

Githubのリポジトリはこちら
https://github.com/sapphire-al2o3/node-pngjs

今回はじめてGithubでフォークしてみた。とりあえず普通にできたみたいだ。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。