写真にフレームを付ける Python スクリプト "ExiFramer" 使い方
写真にフレームを付ける Python スクリプト "ExiFramer" の使い方を説明します。
準備
1.Python をインストールします。
2.Pillow をインストールします。
基本的な使い方
1.フォルダーを作ります。
2.次のファイルをフォルダーに置きます。
・写真(TIFF または JPEG)1つ以上、上限は不明
・Python スクリプト "ExiFramer.py"
・設定ファイル "FrameSettings.csv"(フレームのデザインを記述したもの)
3.Python スクリプトを実行します。
処理中に "working" というフォルダーができます。
処理が終わると、"finished" に変わります。
フレームのデザインを変更する
設定ファイル "FrameSettings.csv" を書き換えることで、フレームのデザインを変更します。
下の方で詳しく説明しています。
参考
完成品は、JPEG フォーマットです。品質は、95 です。
Shooting_Information.csv というファイルができあがります。一部のExif 情報が入っています。
"finished" フォルダーがある場合は、上書きされます。古いデータは消えます。
"working" フォルダーがある場合も、フォルダーごと消えます。
元の画像ファイルはいじりません。
設定ファイルがない場合、デフォルト設定(スクリプト内に記述)でそれなりのものを作ります。
動作を確認した環境
Mac
MacOS 10.14, Python 3.10, Pillow 10.4.0
Windows
Windows 10, Python 3.12, Pillow 10.4.0
フレームのデザインの変更(概要)
設定ファイルの2列目のデータを変更します。
"FrameSettings.csv"
Name:設定項目の名称
Settings:設定内容
説明:項目の簡単な説明
設定の変更は、テキストエディターか表計算ソフトを使うと良いと思います。
Mac の Numbers で開いた場合は、修正した後で
ファイル>書き出す>CSV…
で書き出します。
テキストエンコーディングは、UTF-8 です。
Windows のワードパッドで開いてみたら文字化けしました。
フレーム各部
フレームを構成する要素です。
フレーム:写真を貼り付ける下地です。
写真:写真です。
プリント:写真と縁取りと外形線を合わせたものです。「プリント」と呼ぶことにします。
縁取り:写真の周囲の縁。
プリントの外形線:1ピクセル幅のライン。
プリントの影:右下45°にできた影。
キャプション:Exif 情報および定型語句の組み合わせを表示します。
設定の詳細
Frame
Yes:フレーム有り
No:フレーム無し
フレーム有りの場合、完成画像の大きさが、”Frame size" で設定したサイズに固定されます。
画像やキャプションの設定によっては、フレーム内に収まらないことがあります。フレームサイズ優先の場合は、元の写真を小さくするか、スクリプトでリサイズする設定(Photo resize = 'Yes' )にしてください。
フレーム無しの場合、写真のサイズに合わせた大きさで完成します。
縁と影がついたプリントを作ったり、大きさを揃えてJPEG に変換したりできます。
キャプションがある場合はキャプションの大きさだけ下方向に拡張されます。マージンのないフレームをつけたような感じです。
Caption
Yes:キャプション有り
No:キャプション無
Photo resize
Yes:リサイズした写真をフレームに貼り付ける
No:オリジナルのサイズのまま写真をフレームに貼り付ける
Photo size max
写真をリサイズするときの最大の大きさの設定
設定例:1920,1920 とか 1920, 1920
幅と高さです。偶数値を推奨します。
Frame size
フレームの大きさの設定
例:2200, 2500 とか 2200, 2500
幅と高さです。
Frame = 'Yes' で有効です。'No' の場合は無視されます。
Frame color
フレームの色の設定
例:128, 128, 128, 255
「色の設定」項を参照
Print border width
プリントの縁の幅、ピクセル単位、整数値
Print border color
プリントの縁の色
設定例:255,254,248,255
「色の設定」項を参照
Print shadow radius
プリントの影のぼかし具合
設定例:6
整数値。
スクリプトの内部的には、ガウスぼかしの関数に入力する半径(radius)の値です。
Print shadow offset
プリントの影のオフセット量
設定例:10
整数値
Print shadow color
プリントの影の色
設定例:0, 0, 0, 255
「色の設定」項を参照
Print outline
Yes:プリントの外形線を表示する
No:プリントの外形線を表示しない
白い下地(フレーム)に白いプリントを貼り付けたときに境界を明確にするため、外形線を設定できます。
プリント(縁無しの場合は写真)の外側を1ピクセル幅(固定)で塗りつぶします。
Print outline color
プリントの外形線の色
設定例:0,0,0,255
「色の設定」項を参照
Border text
Yes:縁取りに文字を表示する
No:縁取りに文字を表示しない
Border text keys
縁取りに表示する文字列
詳細は、「Exif 情報を含む文字列の設定」項を参照してください。
Border delimiter
縁取りに表示する文字列の区切り文字
詳細は、「Exif 情報を含む文字列の設定」項を参照してください。
Font0
「フォントの設定」項を参照してください。
Font0 index
「フォントの設定」項を参照してください。
Font0 size
縁取りに表示する文字の大きさ
Font0 color
縁取りに表示する文字の色
「色の設定」項を参照してください。
Margin1
写真の下端からキャプションの外形上端までの距離
整数値、ピクセル単位
マイナスの数値を設定すれば、キャプションを写真に重ねることも可能
フレーム無しでキャプションありの場合、この値は、キャプションの下側の余白としても使います。つまり、キャプション外形の上下に Margin1 分の余白が付きます。
Text1
Yes:キャプション1行目を表示する
No:キャプション1行目を表示しない
Text1 keys
「Exif 情報を含む文字列の設定」項を参照してください。
Text1 delimiter
「Exif 情報を含む文字列の設定」項を参照してください。
Font1
「フォントの設定」項を参照してください。
Font1 index
「フォントの設定」項を参照してください。
Font1 size
キャプション1行目の文字の大きさ
Font1 color
キャプション1行目の文字の色
設定例:255, 255, 128, 255
「色の設定」項を参照してください。
Margin2
1行目と2行目の間隔
設定例:36
整数値。ピクセル単位
Text2
Yes:キャプション2行目を表示する
No:キャプション2行目を表示しない
Text2 keys
「Exif 情報を含む文字列の設定」項を参照してください。
Text2 delimiter
「Exif 情報を含む文字列の設定」項を参照してください。
Font2
「フォントの設定」項を参照してください。
Font2 index
「フォントの設定」項を参照してください。
Font2 size
キャプション2行目の文字の大きさ
Font2 color
キャプション2行目の文字の色
設定例:128, 255, 255, 128
「色の設定」項を参照してください。
Margin3
2行目と3行目の間隔
設定例:18
整数値
Text3
Yes:キャプション3行目を表示する
No:キャプション3行目を表示しない
Text3 keys
「Exif 情報を含む文字列の設定」項を参照してください。
Text3 delimiter
「Exif 情報を含む文字列の設定」項を参照してください。
Font3
「フォントの設定」項を参照してください。
Font3 index
「フォントの設定」項を参照してください。
Font3 size
キャプション3行目の文字の大きさ
Font3 color
キャプション3行目の文字の色
設定例:255, 128, 255, 128
「色の設定」項を参照してください。
Caption outline
キャプションの外形線(枠線)の有無
Yes:キャプションの外形線有り
No:キャプションの外形線無し
キャプションの外形は、キャプションのバウンディングボックスの周囲に余白(Caption margin)を追加したものになります。
キャプションの外形の内側が1ピクセル幅(固定)で塗られます。
Caption outline color
キャプションの外形線(枠線)の色
設定例:64,64,64,255
「色の設定」項を参照してください。
キャプションの外形は、キャプションのバウンディングボックスの周囲に余白(Caption margin)を追加したものになります。
Caption base color
キャプションの地の色
設定例:255,255,255,128
「色の設定」項を参照してください。
Caption margin
キャプションの文字の周囲の余白
設定例:32
整数値
色の設定
色は次のように設定します。
255,255,255,255
次のようにコンマの後にスペースを入れても良いです。
255, 255, 255, 255
数値はそれぞれ、赤、青、緑、不透明度です。
0から255までの整数値です。
不透明度を0にすれば完全に透明になり下地が透けて見えます。
255にすれば完全に不透明になり、赤青緑に設定した色が表示されます。
中間の数値の場合は、下地とのミックスになります。
Exif 情報を含む文字列の設定
Exif 情報と固定文字列を組み合わせて表示します。
Border text keys、Text1 keys、Text2 keys、Text3 keys の設定例:
Nature Watch by t.koba, DateTime
> Nature Watch by t.koba という文字と、Exif 情報の年月日時分秒を合わせたもの
Program, Aperture, Shutter, ISO, ExposureBias
> Exif 情報から、露出プログラム、絞り、シャッタースピード、露出補正を合わせたもの
DateTime, Size, FocalLength
> 撮影年月日、写真の大きさ(リサイズ後のもの)、実焦点距離を合わせたもの
Make, Model, Lens
> カメラのメーカー名、カメラの機種名、レンズの機種名を合わせたもの
キーワードは、コンマで区切って記入します。コンマの後にスペースを入れても良いです。
キーワード
DateTime: 年月日日時分、2023-08-18 11:37:39
Size: 写真のサイズ、1920 x 1440 px
FocalLength: 実焦点距離、90mm
Program: 露出プログラムのモード、Mode M(他に、P、S、A など)
Aperture: 絞り、F5.6
Shutter: シャッタースピード、1/2000sec(1秒を超えるケースに対応していませんでした)
ISO: 感度、ISO2000
ExposureBias: 露出補正、±0.0EV
Make: カメラのメーカー
Model: カメラのモデル名
Lens: レンズのモデル名
スクリプト内部で定義した Exif 情報に、キーワードが存在する場合は、Exif 情報が表示されます。
Exif 情報のキーワードに存在しないワードの場合は、記入した文字がそのまま表示されます。
有効なキーワードは、次のファイルを見てもわかります。
(項目名は、下の画像を拡大してもわかるかもしれません)
"Shooting_Information.csv"
このファイルは、スクリプト実行後に完成画像と同じフォルダー "finished" に保存されます。
区切り文字
Border delimiter、Text1 delimiter、Text2 delimiter、Text3 delimiter の設定
設定例:
,(コンマだけ、ギチギチにコンマで区切られたものになります)
, (コンマとスペース、スペースが入って見やすくなります)
他に、スペースだけとか縦棒とか好きな文字を使えます。
あとは、文字列に固定の文字を入れることができます。
Text1 keys を次のように設定
露出プログラム:,Program, | 絞り:,Aperture, シャッタースピード:,Shutter, 感度:,ISO, (露出補正:, ExposureBias, )
Text1 delimiter は空
区切り文字 delimiter との兼ね合いを考慮しないと、意図しない場所に区切り文字が入る恐れがあリます。
また、半角コンマを文字として使うのは無理です。半角コンマは、keys の要素の区切りとみなされてしまい表示されません。
フォントの設定
Mac の例:
,/Library/Fonts/Handwriting - Dakota
,/System/Library/Fonts/HelveticaNeue.ttc
フォントのファイル名だけでOK
例:ヒラギノ丸ゴ ProN W4.ttc
Windowsの例:meiryob.ttc
メイリオの太字です。
ファイル名だけ指定すれば、フォントが置かれていそうな場所を探してくれるようです。
フォントのインデックス
インデックスがあるフォントとないフォントがあります。ttc ファイルは、複数のフォントが収納されているので、デフォルト以外のフォントを使う場合は、インデックスを指定しなければならないということです。
インデックスのないフォントは、index の設定を削除(空に)してください。
インデックスのあるフォントでインデックスを設定しない場合には、デフォルトのフォントが使われます。
スクリプトの入手
スクリプトはこちらから入手できます。
t.koba
この記事が気に入ったらサポートをしてみませんか?