事象発生日:2024-01-04
記事公開日:2024-01-10
アクセス数:1714
自分の撮影した写真を雑に公開しているページ『Gallery』 において,富士フイルム (FUJIFILM) の出来栄えプリセットである「フィルムシミュレーション」で写真をフィルタできる機能を追加しました.
富士フイルム (FUJIFILM) のカメラには,フィルムシミュレーション (Film Simulation) という,写真の出来栄え(発色やコントラストなど)のプリセットがあります.他社が「ポートレート」や「ビビッド」のような名称であるのに対して,フィルムメーカーとしてのこだわりなのか,「Provia」,「Astia」,「Velvia」というようなフィルムの銘柄で表現されます.
自分が写真を撮る時には,その場の雰囲気や撮りたいイメージにあわせてこのフィルムシミュレーションを選択肢ます.写真を見返すときには,「あれ,この写真ってどのフィルムシミュレーションで撮ったものだっけ?」や「Velvia で撮影した写真を見たいな」と思うこともしばしばあり,フィルムシミュレーションでの写真の整理ができないか考えていました.
カメラの撮って出しの JPEG や,FUJIFILM X RAW Studio で現像した JPEG には,その Exif にフィルムシミュレーションの情報が残っていることは把握していたのですが,Adobe Lightroom Classic で現像するとその Eixf tag が消えており,撮影写真を包括的にフィルムシミュレーションで整理することを諦めていました.
そんな中,
で様々な画像ファイルの Exif をいじっていると,Exig tag は異なるものの Lightroom 現像 JPEG であっても,フィルムシミュレーションが取得可能なことがわかり,今回,フィルムシミュレーションでのフィルタリング機能を 自分の撮影した写真を雑に後悔しているページ『Gallery』 にて実装しました.
めっちゃ便利じゃん....なんでもっと早く実装しなかったんだ....
実装したのはいいが,そろそろちゃんとコントロールパネルのデザインを考えたいね....(自分で使う分にはこれで困ってないけれども,一応公開しているのでね....)
フィルムシミュレーションを判定している部分のコードを下に掲載します.
撮って出し or Lightroom での現像によって,また,モノクロかどうかで Exif tag が異なるので,適当に tag の存在で条件分岐しているだけです.
Lightroom 出力 JPEG の Exif tag の表記ゆれが激しく,正規化が酷いことになっていますね....
v2 suffix を取り除き,大文字化してから比較するなどするともう少しましなコードにはなるものの,まぁ,どういう表記ゆれが含まれているかを見たかったため,こういう愚直なコードにしています.
if (exists ${$exifinfo}{'FilmMode'})
{
$TEMP{'filmSim'} = ${$exifinfo}{'FilmMode'};
$TEMP{'filmSim'} = "Provia" if ($TEMP{'filmSim'} eq "F0/Standard (Provia)");
$TEMP{'filmSim'} = "Astia" if ($TEMP{'filmSim'} eq "F1b/Studio Portrait Smooth Skin Tone (Astia)");
$TEMP{'filmSim'} = "Velvia" if ($TEMP{'filmSim'} eq "F2/Fujichrome (Velvia)");
$TEMP{'filmSim'} = "Classic Neg" if ($TEMP{'filmSim'} eq "Classic Negative");
} elsif (exists ${$exifinfo}{'CameraProfile'}) {
$TEMP{'filmSim'} = ${$exifinfo}{'CameraProfile'};
$TEMP{'filmSim'} = "Provia" if ($TEMP{'filmSim'} eq "Camera PROVIA/Standard");
$TEMP{'filmSim'} = "Provia" if ($TEMP{'filmSim'} eq "Camera PROVIA/STANDARD");
$TEMP{'filmSim'} = "Provia" if ($TEMP{'filmSim'} eq "Camera PROVIA/Standard v2");
$TEMP{'filmSim'} = "Provia" if ($TEMP{'filmSim'} eq "Camera PROVIA/STANDARD v2");
$TEMP{'filmSim'} = "Astia" if ($TEMP{'filmSim'} eq "Camera ASTIA/Soft");
$TEMP{'filmSim'} = "Astia" if ($TEMP{'filmSim'} eq "Camera ASTIA/SOFT");
$TEMP{'filmSim'} = "Astia" if ($TEMP{'filmSim'} eq "Camera ASTIA/Soft v2");
$TEMP{'filmSim'} = "Astia" if ($TEMP{'filmSim'} eq "Camera ASTIA/SOFT v2");
$TEMP{'filmSim'} = "Velvia" if ($TEMP{'filmSim'} eq "Camera Velvia/Vivid");
$TEMP{'filmSim'} = "Velvia" if ($TEMP{'filmSim'} eq "Camera Velvia/VIVID");
$TEMP{'filmSim'} = "Velvia" if ($TEMP{'filmSim'} eq "Camera Velvia/Vivid v2");
$TEMP{'filmSim'} = "Velvia" if ($TEMP{'filmSim'} eq "Camera Velvia/VIVID v2");
$TEMP{'filmSim'} = "Pro Neg. Std" if ($TEMP{'filmSim'} eq "Camera Pro Neg Std");
$TEMP{'filmSim'} = "Pro Neg. Std" if ($TEMP{'filmSim'} eq "Camera Pro Neg. Std");
$TEMP{'filmSim'} = "Pro Neg. Std" if ($TEMP{'filmSim'} eq "Camera Pro Neg Std v2");
$TEMP{'filmSim'} = "Pro Neg. Std" if ($TEMP{'filmSim'} eq "Camera Pro Neg. Std v2");
$TEMP{'filmSim'} = "Pro Neg. Hi" if ($TEMP{'filmSim'} eq "Camera Pro Neg Hi");
$TEMP{'filmSim'} = "Pro Neg. Hi" if ($TEMP{'filmSim'} eq "Camera Pro Neg. Hi");
$TEMP{'filmSim'} = "Pro Neg. Hi" if ($TEMP{'filmSim'} eq "Camera Pro Neg Hi v2");
$TEMP{'filmSim'} = "Pro Neg. Hi" if ($TEMP{'filmSim'} eq "Camera Pro Neg. Hi v2");
$TEMP{'filmSim'} = "Classic Chrome" if ($TEMP{'filmSim'} eq "Camera CLASSIC CHROME");
$TEMP{'filmSim'} = "Classic Chrome" if ($TEMP{'filmSim'} eq "Camera CLASSIC CHROME v2");
$TEMP{'filmSim'} = "Eterna" if ($TEMP{'filmSim'} eq "Camera ETERNA/Cinema");
$TEMP{'filmSim'} = "Eterna" if ($TEMP{'filmSim'} eq "Camera ETERNA/Cinema v2");
$TEMP{'filmSim'} = "Acros" if ($TEMP{'filmSim'} eq "Camera ACROS");
$TEMP{'filmSim'} = "Acros" if ($TEMP{'filmSim'} eq "Camera ACROS v2");
$TEMP{'filmSim'} = "unknown" if ($TEMP{'filmSim'} eq "Adobe Standard");
$TEMP{'filmSim'} = "unknown" if ($TEMP{'filmSim'} eq "Adobe Standard v2");
$TEMP{'filmSim'} = "unknown" if ($TEMP{'filmSim'} eq "Embedded");
} elsif (exists ${$exifinfo}{'Saturation'}) {
# 白黒は FilmMode には入らないらしい
# Saturation は,撮って出しでも Lightroom 現像でも存在する tag
$TEMP{'filmSim'} = "Acros" if (${$exifinfo}{'Saturation'} eq "Acros");
}
名前
Email (※公開されることはありません)
コメント