事象発生日:2024-01-04
記事公開日:2024-01-10
アクセス数:944
自分の撮影した写真を雑に公開しているページ『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 (※公開されることはありません)
コメント