pngtxt.zip (458KB) MD5:44fda2b7421e94e6f181ee80a134e814

exerb で固めてみた。たぶん zlib.dll がいる。んでファイルサイズが大きい。

iTXt 以外のチャンクは (tEXt, zTXt チャンクも) 見ることさえできません。tEXt, zTXt チャンクを全部 iTXt に変換する機能とかあるけども、文字コード変換はやらないからあんまり意味ない。ついでに変換するやつに Unicode 文字以外があると微妙に危険。

Compress にチェックを入れても、圧縮しないほうがデータサイズが小さいときは自動的に無圧縮で保存されます。つまり Compress にチェックを入れても必ず圧縮されるわけじゃないです。たぶん多くの場合はこのほうが便利だと思うので……

  1. トップ
  2. soft
  3. PNG iTXt チャンク編集ツール
  1. トップ
  2. web
  3. PNG iTXt チャンク編集ツール

図書室から寝ぼけながら教室の自分の机に戻ると、知っている女の子が二人いる。一言二言話して行ってしまう。机の上に何か色々書いてある紙が置いてある。白黒でペンによって書かれている。右上から左下にかけて斜めに女の子の絵が描いてある。二人のうちの一人が書いたらしい。その周りにはいろいろメッセージがぎっしり書いてある。カバンの中に手帳が入っている。二人のうち一人のらしい。妙に幸せな気分だった。

起きたらなんか妙に切なかった。なんかそれでしばらく混乱しててひとつ授業受けそびれた……別にいいんだけど出席がやばめ。

とにかくごちゃごちゃ書いてある紙の絵が好きだった。

  1. トップ
  2. self
  3. 夢。図書室にて
  1. トップ
  2. life
  3. 夢。図書室にて

拙作編集ツールスクリーンショット

結局自分で作ってみた。exerb で EXE 化しようと思ったら mswin32 版の Ruby では zlib が原因不明の SEGV で落ちるのでどうしたものかと。

Ruby + VisualuRuby で GUI 作った。iTXt 以外は TweakPNG があるので何もしない。UI は見ての通り TweakPNG のパクり。

pngtxt.rb
GUI 部分。VisualuRuby 使ってます。何故かポップアップメニューが右ダブルクリックじゃないと出ない謎。
png.rb
iTXt を編集するのに使える部分だけ実装。ただ UTF-8 への変換はこのクラスはやらない。

使っているライブラリは Uconv と zlib と VisualuRuby かな。VisualuRuby が Win32API 使ってるか。といいますかですね、GUI まですぐ作れる Ruby ってやっぱ偉大なんですよ。

zlib.dll を変えていったら(?)直った。よく分からないけどめでたし。

  1. トップ
  2. soft
  3. PNG チャンク編集ツール 2Edit PNG iTXt chunk

とりあえず iTXt への書き込み/読み込み方法はできたので実際にどうやって埋め込むかを考える。考えるっていっても、メタデータを埋め込んでいる PNG ファイルというと RDF のアイコンが既にあるのでそいつをそのまま真似ればいいかなと。

この埋め込み方法は二つのチャンクを使う。一つはメディアタイプを明確にする Metadata Type チャンク。もう一つは実際にデータを埋め込む Metadata チャンク。RDF アイコンではこれらは tEXt チャンクに入っているけど、日本語を (というか国際化のために) 使うのでどちらも iTXt に入れる。Metadata Type (ASCII しか使われないっぽい) も iTXt にするのは tEXt, zTXt チャンクが iTXt 登場のおかげで既に古くさい感じが漂うから。

ってか実際何を埋め込んで何をしたら面白いかをちゃんと考えてない。まだあくまでこういう方法もできるという保険みたいなもん。何かいいことできないかな。

  1. トップ
  2. web
  3. PNG への RDF メタデータ埋め込み
  1. トップ
  2. sw
  3. PNG への RDF メタデータ埋め込み

GOOD DREAMS のせいで(というのよりフリクリまた見たせいで)ピロウズのアレとかソレとかがかなり燃焼。ポータブルプレイヤー(256MB)にも the pillows ディレクトリ作って入れまくった。

ところで最近 Blues Drive Monster 聞いているとヤバいですよ。喩えるなら心臓に下から繋がっているパイプを素手で掴んでひっぱってくるような感じ。本当に格好いいなぁ……

たのしいことがしたい。

  1. トップ
  2. music
  3. the pillows
  1. トップ
  2. life
  3. the pillows

何か知らないけどいろんなところで微妙に価値観がずれているらしい。学校では控えめに言っても納得できないことがかなり多い。色々あって黙っているのが一番いいと気付いたわけだけど、完全に諦め切れない部分で困る。ちゃんとマルチスレッドにしないと……別スレッドに納得できないことを移して kill すれば(感情用のプロパティに直接 nil を代入しようとすると TypeError なのだ)消える。素敵だ。問題はどうやって実装するかだけれど。

俺は嫌いなことが多いっぽい。例えば俺の管理下にある部分で全く Strict じゃない部分があるのは嫌いだ。フレームが大嫌いだ。気取ったやつが嫌いだ。まぁを多様するやつが嫌いだ。解ったふりするやつが嫌いだ。勘違いが嫌いだ。C 言語至上主義者が嫌いだ。汚い実装が嫌いだ。あまり使わない漢字を強いポリシーがないのに使っているのが嫌いだ。他人に影響されすぎるやつが嫌いだ。聞いてもいない音楽を批判するのは頭が腐ってるとしか思えない。勉強できるやつが嫌いだ。理解力が低いやつが嫌いだ。満員電車が嫌いだ。遅刻しても各駅に乗る。体育会系が大嫌いだ。体育教師は例外なく嫌いだ。挙動不審なやつが嫌いだ。神話至上主義者が嫌いだ。緊張感が嫌いだ。調べようとしないやつが嫌いだ。神経症だからと言うやつが嫌いだ。テレビのニュースが大嫌いだ。空気読めないやつが嫌いだ。くだらないラブソングが嫌いだ。想像力がないやつが大嫌いだ。こういう中で自分が当てはまっている部分があると本当嫌気がさす。

マンガ読まないのに MANGA SICK。可愛いあの子は夢の中とか、インチキ空間の次元は幾つだろうとか。もやしは日のないところで育つ。なんかそれっぽいこと言っておけばOK。

これからしばらくですますを使うようにしようと思う。なんかアフォっぽくなって素敵そうだから。

  1. トップ
  2. self
  3. ろっく

もっとちゃんと調べてみました。でもあんまり見つからない。(google: png iTXt)

PNGCRUSH
iTXt を埋め込めるらしいですが、コマンドラインで、僕の環境では起動したら CRUSH しました。なるほど。
TweakPNG
チャンクエディタ(&ビューワ) 。でも iTXt は (存在していても問題ないみたいですが) キーワードの表示しかできません。編集・追加もできません。と README に書いてありました。
もじうめ
読むかぎり tEXt を使用しているようです。説明にはちゃんとPNGの仕様上、アルファベットだけにしてください。と書いてあります。
PNG Comment Editor
tEXt に Shift_JIS データをそのまま書き込むようです。説明書に書いてないのでバイナリエディタで開きました。

PNG 仕様書の tEXt チャンクの仕様には

テキストは ISO/IEC 8859-1 (Latin-1) [ISO/IEC-8859-1] 文字集合に従って解釈されます。テキスト文字列はどのような Latin-1 も格納できます。テキスト文字列中の改行は LF 文字(十進 10)ひとつで表現されるべきです。ほかのコントロール文字をテキスト中に使うことは推奨されません。

と書いてあるので、マルチバイトは含めないみたいです。日本語に拘るなよとか言われたらそれまでという感じですけど、XML 格納するなら I18N 必須じゃないかなぁと思います。

てかですますってなんか……

png.rb

スーパー適当実装 iTXt 埋め込み用クラス(でもサイズとかも取得できるよ)。微妙に中途半端だけど力尽きたのでまた今度にします。デバッグ用のコード (p) 満載。

  1. トップ
  2. soft
  3. PNG チャンク編集ツール