PNG Info (PNGファイルのメタデータ) を読み込むコードと実行結果を紹介します。
PNGファイルのメタデータ(PNG Info, Metadata)を読み取る方法はいくつかありますが、
ImageSharpライブラリを利用すると手軽に実装できます。この記事では、ImageSharpを利用して、PNGファイルのメタデータを読み込むコードと実行結果を紹介します。
今回はWindows Formアプリケーションで実装します。Windows Formアプリケーションのプロジェクトを作成し、
ImageSharpをインストールします。
NuGetを利用したインストールについては、以下の記事を参照してください。
下図のフォームを作成します。TextBoxを2つ、Buttonを2つ、OpenFileDialogを配置しています。
フォームのコードファイルに以下のコードを記述します。
using SixLabors.ImageSharp.Formats.Png;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Png.Chunks;
namespace ReadPngInfo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
textBox2.Text = openFileDialog1.FileName;
}
}
private void button1_Click(object sender, EventArgs e)
{
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load(textBox2.Text);
if (img.Metadata.DecodedImageFormat != PngFormat.Instance) {
textBox1.Text += "PNG 形式ではありません";
return;
}
PngMetadata pngMeta = img.Metadata.GetPngMetadata();
foreach (PngTextData txt in pngMeta.TextData) {
textBox1.Text += $"[{txt.Keyword}] = {txt.Value}";
}
}
}
}
ファイルパスからイメージを読み込みます。
SixLabors.ImageSharp.Image img = SixLabors.ImageSharp.Image.Load(textBox2.Text);
MedtadataプロパティのDecodedImageFormatの値を判定してPNGファイルかを判定します。
if (img.Metadata.DecodedImageFormat != PngFormat.Instance) {
textBox1.Text += "PNG 形式ではありません";
return;
}
PNGファイルの場合は、GetPngMetadata() メソッドを呼び出し、メタデータを取得します。
取得したメタデータはテキストボックスに出力します。
PngMetadata pngMeta = img.Metadata.GetPngMetadata();
foreach (PngTextData txt in pngMeta.TextData) {
textBox1.Text += $"[{txt.Keyword}] = {txt.Value}";
}
今回は下図の画像を準備します。MidJourneyで生成した画像です。PngInfoが埋め込まれています。
プロジェクトを実行します。下図のウィンドウが表示されます。
[button2]をクリックするとファイルを開くダイアログが表示されます。先ほど準備した画像を選択します。
上部のテキストボックスにファイルパスが設定されます。[button1]をクリックします。
ファイルからPNG Infoの値が読み込まれ、テキストボックスに表示できました。
PNG Infoの値を読み込むことができました。