世界を動かす技術を、日本語で。

PNGが復活しました

概要

  • PNG フォーマットが20年以上ぶりに大幅なアップデート
  • HDR対応やアニメーション など、時代に合わせた新機能を追加
  • 主要機関や企業 が仕様策定に参加し、広く採用が進む
  • 今後のアップデートで 圧縮改善や並列処理 も予定
  • 既に多くのソフトウェア・ハードウェアが 新仕様に対応

PNG復活のニュース

  • PNGフォーマット が約20年ぶりに大規模アップデート
  • 米国議会図書館、カナダ国立公文書館、オーストラリア国立公文書館 もPNG推奨
  • 時代に即した競争力維持 が重要課題
  • Rec. 2020とRec. 709の色域比較 に対応した画像生成が可能
    • HDR画像の色域は従来より広範囲
    • HDRサポート は4バイト(+PNGチャンクのオーバーヘッド)のみで実現
    • Chris Lilley(PNG共同著者、技術ディレクター)が技術解説記事を公開
  • APNG(Animated PNG) の正式認識
    • Mozillaが提案し、現在は多くのソフトで広くサポート
    • 仕様として現実を反映
  • Exifデータ の公式サポート
    • 著作権、カメラ情報、GPS位置情報などの付加情報保存が可能
  • 全体の整理・誤記修正・明確化 も実施

PNGアップデートの背景

  • 前回のPNG仕様公開は20年以上前
    • iPhone登場の3.5年前という時代背景
  • 技術進化 による再活性化
    • W3C Timed Text Working Group(字幕関連)がHDR対応を要望
    • 提案を受け、複数の専門家が改良を主導
    • Adobe、Apple、BBC、Comcast/NBCUniversal、Google、MovieLabs、W3C が参加
    • 仕様策定は「ドリームチーム」体制
  • 既に次世代PNG仕様の作業も開始

新PNG仕様の採用状況

  • Chrome、Safari、Firefox、iOS/macOS、Photoshop、DaVinci Resolve、Avid Media Composer などで新仕様サポート
  • 放送業界でも採用が進行
  • ハードウェア・ツール類も新仕様対応へ移行中
  • ニュース速報やスポーツ中継のスコア表示などで HDR対応PNG が利用される例

今後の展望

  • 圧縮率改善並列エンコード/デコード も開発中
  • 次回アップデート(Fourth Edition)は短期間での公開を目指す
    • HDRとSDRの互換性向上 が主なテーマ
  • さらにその後、 圧縮技術の刷新 を目指したFifth Editionも研究中

PNGワーキンググループへの感謝

  • PNGワーキンググループ参加者 の努力により実現
  • 継続的なフィードバックと感謝の意の表明が重要

Hackerたちの意見

みんなすぐに「もっと圧縮が良くなるの?」って思ったよね?もうその作業を始めてるんだけど、ちょっと心配。圧縮アルゴリズムを変えると、互換性が壊れちゃう可能性があるから、実際にはpngファイルじゃない「png」ファイルが出てくるかも。USB-Cみたいな感じで、画像にも影響が出るかもね。

圧縮アルゴリズムを改善しても、まだ有効なデコンプレッション入力を作れるんじゃない?PNGはzipをベースにしてるから、互換性を壊さずにzipを改善する方法はあるはず。でも、彼らもバカなことをすることがあるから、引用した文の最後に「ちゃんとやりたい」って言ってるから、希望はあるね。

より良い圧縮は、新しいフィルターメソッドや新しいインターレースアルゴリズムを意味するかもしれない。でも、どれも即座に互換性がなくなるだろうね。関連する問題でも指摘されてるけど、少なくとも新しいメディアタイプが必要になるだろうね。

どの圧縮が使われているかを示すフィールドがあるんだよね。別の圧縮形式を追加するのは、既存のソフトウェアがそれを解凍できない有効なPNGとして認識するように扱うべきだと思う。PNGフォーマットは、ソフトウェアが理解できる部分だけを読み取って、理解できない部分は無視できるように設計されてる。拡張可能なフォーマットを持っていて、それを拡張しないのは無意味な気がする。

低解像度の画像を従来の圧縮アルゴリズムで含むPNGファイルを想像できるよね。さらに新しい圧縮アルゴリズムを使って高解像度の詳細をエンコードするみたいな。

USB-Cの仕様って後方互換性を壊すの?2018年のMacBookは2025年のUSB-C充電器で問題なく動くよ。

+1 なんでpng4とかにしないの?互換性が最初からわかりやすい方がいいよね。

新しいcICPチャンクタイプについてのブログ記事を読んでみたけど、どうやら「適切なHDRサポート」って、埋め込まれたICCプロファイルでできないことじゃなくて、小さい画像ファイルに適した色空間情報の短縮版みたいだね。

アニメーションGIFは、透明な背景とロスレス圧縮を持つアニメーションPNGに置き換えられるんだ!2000年代のウェブサイトの懐かしさが復活するかもね :) アニメーションSVGもあるのかな?JavaScriptベースのSVGアニメーション(アニメーションチャットボットのアバターだった)を見たことがあるけど、標準のフレームワークがあるかは分からないな。

アニメーションSVGもあるのかな? うん、あるよ。関連するアニメーション要素: • • • • 詳細は https://www.w3schools.com/graphics/svg_animation.asp を見てね。

最近のGIFは実際には音のない動画として提供されてることが多い気がする。圧縮がうまくいくからね。アニメーションPNGってAV1とかに勝てるのかな?

ちょっと信じられないけど、2003年にアニメーションSVGを使ったウェブアプリを作ってた電力会社の面接を受けたことがあるんだ。

アニメーションSVGもあるのか気になる。SVGはただのHTML5で、CSSやボタン付きのJavaScript、ウェブワーカー、任意のフェッチリクエストなどをフルサポートしてるけど(画像ビューアやブラウザではサポートされてないけどね)。

これがロスレスJPEG XLと比べてどうなるのか、すごく興味あるな。

それに近づくことは無理だと思うな。JXLみたいに先進的でロイヤリティフリーなものがあるのに、新しいPNGバージョンの意味って何?

公式にExifデータをサポートしてる これが一番いいニュースかも。カスタムデータをヘッダーに書き込むことはできるけど、Exifがあるのは良いことだね。ところで、Exifには磁力計(回転)や加速度(重力)のフィールドはあるのかな?カメラアプリが保存する画像にこの情報をGoogleが保存してない理由が気になる。水平を整えたり、パノラマを作ったりするのにすごく役立つと思うんだけど。

Exifは画像のレンダリングに混乱を招くこともあるよね。回転を適用すべきかどうか?古いデコーダーと新しいデコーダーでは、Exifの回転を無視できるオプショナルなチャンクだから、異なる結果になることがある。新しいデコーダーでも、仕様にはExif回転の使い方についてのデコーダーの推奨が載ってないし。「デコーダーがExifデータの有効性について独立した知識を持たない限り、そのデータは歴史的価値しかないと見なすべき」とは書いてあるけど、回転を使わないことを推奨するだけで、厳密な「画像を回転させない」という指示はない。JPEGのExifでも、デスクトップ環境と基盤ライブラリの両方が独立して回転を適用するバグがあったりするし。

そうなんだよね、ウェブサイトはアップロードされた画像からExifデータをほとんど全部削除しちゃうことが多い。ストーカーが人を追跡するために使うフィールドがあるからね。

カメラの加速度センサーや慣性ナビゲーションシステムの読み取り値を記録する標準フィールドはないんだ。Exifフィールドはこちら: https://exiv2.org/tags.html

誰かが人間の時間や日付の概算を管理して、他のソフトウェアがそれに合わせる必要があるよね。「2025年にスキャンされた写真は、1940年以前、1920年以降のイースターに関するもの」みたいに。

問題なのは、GoogleフォトやAppleフォトは手動で日付を選べるけど、実際には写真のEXIFに設定されないから、プラットフォームを移動するときに、スキャンした画像やEXIFなしで送信された画像の日時が消えちゃうこと。

EXIFにはDateTimeDigitizedがあるよね。[0] 曖昧な日付にはEDTF仕様[1]があって、もっと広く採用されるといいな。 [0] https://www.media.mit.edu/pia/Research/deepview/exif.html [1] https://www.loc.gov/standards/datetime/

ちょっと期待してる。PNGが人気なのは、凍結された状態っていうのが大きいからね。

「20年の停滞を経て、PNGが新たな活力を持って戻ってきた!20年の成功の後、うまくいってるものをいじりたくなる誘惑には勝てない。」

JXLをPNGに組み込むってどうかな?そうすればサポートされる可能性が高くなるよね。

アニメーションの公式サポート、いいね!めっちゃ懐かしい感じがする。11年前にアニメーションPNGをエクスポートできるLシステムジェネレーターを書いたことがあるんだ!その時はFirefoxでしか動かなかったし、Chromeには拡張機能があったけど、残念ながらウェブサイトを閉じなきゃいけなかった。あの頃はC#用のライブラリなんてなかったけど、実はPNGから直接APNGを作るのは結構簡単なんだよ。正しいヘッダーでチャンクを書けばいいだけで、エンコーダーはいらないし(PNGがすでにエンコードされてる前提だけどね)。