/TOP/PNG Programming Resources
Ruby/libpng を作成する過程で PNG に関するリソースを色々と参照しました。 備忘録代わりにウェブページ化しておきます。 基本的に libpng を使ってプログラミングするためのリソースという観点で書いています。
[PNG (Portable Network Graphics) Home Site] PNG の総本山。PNG に関する情報のほとんど全てはここから入手または辿ることができます。 よってこのページは PNG Home Site の部分的再構成みたいなもんです。
[W3C --- PNG (Portable Network Graphics)]
W3C (The World Wide Web Consortium) の PNG ページ。
バージョン1.0の仕様書、PNG がガンマをサポートするワケ、
自分の使っているブラウザの PNG 対応状況をみるためのサンプル画像、以上の三点(だけ・・・)があります。
[PNG普及プロジェクト JAPAN] 日本における PNG ポータルサイト。とにかく必見。
[PNG Specification, Version 1.2] libpng.org にある PNG の最新仕様書です。
[PNG Specification, Version 1.2] KoNDoH さんによる邦訳です。とてもお世話になりました。
[PNG Specification, Version 1.0] W3C 勧告はバージョン1.0です。
[PNG (Portable Network Graphics) 仕様書] これもKoNDoH さんによる邦訳。
[PNG (Portable Network Graphics) 仕様書 Version 1.0] koujin さんによる邦訳。細かい訳注が特徴です。+PNG 仕様書翻訳のページ
[libpng] PNG のリファレンスライブラリ libpng です。 PNG の仕様はなかなかに複雑なので、どれ PNG ライブラリでもスクラッチしてやるかという人はあんましいないみたいです。 代わりに libpng をベースにした高水準ライブラリは幾つかあります。
[Image Library] BCB で作ったビュワー付き。
[JAI (Java Advanced Imaging API] Java でイメージを扱う時の高レベル API です。
[JIMI] イメージ I/O API です。JAI を含んでいるみたいです。
[PngEncoder] Java Image オブジェクトを PNG にするライブラリ。
[Java Image Content Handlers] Java のライブラリですが、C で書かれています。
[Sixlegs Java PNG] 読み込みだけですが、仕様の大部分に対応しています。 最初はこれを参考に Ruby/libpng 作ってました。
[Welcome to tama's Home Page] tama API for Java に PNG を扱うクラスがあります。
[Python Imaging Library] 画像処理用のライブラリ。ちょっとみた感じでは実用本位でなかなか良さげな設計です。
[ClanLib]
マルチプラットホームなGame SDKです。
2D/3D(OpenGL)、入力デバイス、ネットワーク、サウンドと一通りそろっているみたいです。
ClanLib-0.4.x/Sources/PNG/provider_png.cpp はアルファチャンネルを考慮した
PNG の読み込みの参考になるでしょう。
[FreeImage] Windows (VC++) 向けの画像読み書き加工ライブラリです。 FreeImage/LoadPNG.cpp は PNG ファイルの読み書きの一例として参考になるでしょう。
[gd] 画像生成ライブラリとして広く使われています。Ruby/GD もあります。 PNG を扱っているのは gd-1.8.3/gd_png.c です。カラータイプごとにそこそこ細かい処理をしています。 ちょっとソースが読みにくいかも。
[gdk-pixbuf] GNOME パッケージの一部です。Imlib の代わりになるライブラリです。 gdk-pixbuf-0.x.x/gdk-pixbuf/io-png.c に PNG 読み込み処理が記述されています。 プログレッシブリードやコールバックの方法も含まれており、読むにはこれが一番良いソースだと思います。
[glpng] PNG 画像を OpenGL のテクスチャにするライブラリです。 src/glpng.c ではガンマ値の処理とアルファブレンド処理が見ておくべきところでしょうか。
[Hipng] Windows のビットマップ (DIB) を PNG にして書き出すためのライブラリです。 C++ で書かれています。
[Ruby/libpng] 拙作。Ruby 用の libpng ラッパーライブラリです。
[zlib] PNG では画像データの圧縮に (GIF のような鬱陶しい) 特許問題のない inflate 圧縮を使っています。 それを実現するのがこのライブラリです。
[libmng] PNG の動画版が MNG です。要は GIF とアニメ GIF の関係です。 MNG は PNG よりも複雑な仕様なので、libmng が安定するのはだいぶ先のことだろうと思います。
[lcms] 色管理ライブラリ。 doc/PNGCHRM.c はPNG ファイルから ICC プロファイルを取得するプログラム。
[PlanetTAGOYA] HSP で書かれた PNG/JPEG コンバータ。
[ソフトウェア工房α] Susie 用の PNG プラグイン、BMP と PNG の相互変換のソフトウェアがあります。 libpng を使っているのでソース付き。
[PNG 利用術] PNG 仕様について、libpng を使ったプログラミングについて、などなど総合的な情報があります。 このサイトを読めばこのページを含め他は要らないかも :-)
[MNG/PNGを使ってみる] PNG と MNG の読書きを自作のライブラリに組み込むお話。
[Linux MoeMoe Project] なかなかいかした名前のサイトです。 「Programing Tips」の「GdkPixbuf から PNG ファイルをセーブする」 に libpng の使い方が少し。
[PNG Interlacing] インタレーシング表示する時に MMX 使って最適化したルーチンを使うと速くなるよっていう話。 これは libpng-1.0.9pre で大体取り込まれています。
[PX :Web Technical Notes] 内容は PNG 1.0 ベースですが、PNG 仕様の Overview、アプリごとの PNG 作成テスト、 Adam 7 インターレースのテストなど有益な情報があります。
C MAGAZINE 1998/06
特集「グラフィックフォーマットPNG その圧縮アルゴリズムとプログラミング」として、
PNG の仕様、libpng の基本的な使い方、BCB のコンポーネント化についての記事があります。
/TOP/PNG Programming Resources
--EOF--