1. はじめに
PNGファイル内には、その画像の幅と高さの情報が埋め込まれています。
この部分の値を変える方法について説明します。
2. PNGファイルの構成
PNGファイルは、先頭から以下の構成になっています。
- PNG ファイルシグネチャ(8バイト)
- チャンク
- チャンク
- :
- (任意個のチャンクが続きます)
チャンク1つ分には、先頭から順番に以下の情報が入っています。
- チャンクデータの長さ(4バイト)
- チャンク形式(4バイト)
- チャンクデータ(長さは「チャンクデータの長さ」で指定される)
- このチャンクのCRC(4バイト)
チャンクにはいろいろな種類がありますが、必須なチャンクがいくつかあります。
その1つが、IHDR(イメージヘッダ)チャンクで、この中に「画像の幅」「画像の高さ」が入っています。
IHDRは1つ目のチャンクであり、そのチャンクデータにセットされる項目は以下の通りです。
幅: 4 bytes
高さ: 4 bytes
ビット深度: 1 byte
カラータイプ: 1 byte
圧縮手法: 1 byte
フィルター手法: 1 byte
インターレース手法:1 byte
(引用元:PNG 仕様書: チャンク仕様書)
3. IHDRチャンク
以下は、とあるPNGファイルをバイナリエディタで開いたところです。
先頭に PNGファイルシグネチャがあり、その直後に IHDRチャンクが配置されています。
IHDR の場合、先ほど書いた通り、チャンクデータの先頭に幅(4バイト)、高さ(4バイト)が入っています。
この画像の場合、幅には「00 00 01 CF」高さには「00 00 01 7B」がセットされていますが、これはそれぞれ10進数で「463」と「379」です(単位はピクセル)。
4. バイナリエディタで幅と高さを編集して保存する
ここで使っている HxD というバイナリエディタの場合、上書きした箇所をクリックして、そのまま文字を上書き入力することができます。
その後、画面上部にある [上書き保存] アイコンをクリックします。
これで、元のファイルが上書きされました。
※ 先ほどとは違うファイルです。
5. 参考
- PNG (Portable Network Graphics) Home Site
- PNG 仕様書: ファイル構造
- PNG 仕様書: チャンク仕様書
- HxD
- Freeware Hex Editor and Disk Editor | mh-nexus