そのPython言語の、Pillowという画像ライブラリを使ったスクリプトです。
Pythonをインストールして、Pillowのライブラリをpipでインストールして
記事を書いている時点のPythonは3.8です。
前回までは、描画系のスクリプトを作りましたが、
今回から写真加工するスクリプトです。
【注意】
ファイルを書き出すスクリプトなので、
消えて困るファイルのあるフォルダでは実行しないでください。
以下にスクリプトのコードを書きます。
"""
トイカメラ風に周辺減光させる
Usage :
python toycamera.py 入力画像 出力画像 塗り残す比率 ぼかし半径
起動パラメータ
塗り残す比率 : 0.3 から 0.5 程度
ぼかし半径 : 20 から 50 程度
大きくすると塗りつぶしの境界がなだらかな調子になります
"""
import os
import sys
from PIL import Image, ImageDraw, ImageFilter
# 起動パラメータ数チェック
if len(sys.argv) < 3 :
print("usage : python toycamera.py 入力ファイル 出力ファイル 塗り残す比率 ぼかし半径")
sys.exit()
# 塗り残す範囲の比率
if len(sys.argv) > 3 :
r_rate = float(sys.argv[3])
else:
r_rate = 0.5
# ぼかし半径
if len(sys.argv) > 4 :
blur_radius = int(sys.argv[4])
else:
blur_radius = 50
if os.path.isfile(sys.argv[1]) is False :
print("入力ファイル名にファイルではない名前が指定されています。")
print("実行を中止します。")
sys.exit()
if os.path.isdir(sys.argv[2]):
print("出力ファイル名にディレクトリ名が指定されています。")
print("実行を中止します。")
sys.exit()
STRENGTH = 120 # 効果の強さ 0(最強)~255(効果なし)
print("以下の条件で処理を行います。")
print(f"入力ファイル {sys.argv[1]}")
print(f"出力ファイル {sys.argv[2]}")
print(f"塗り残す比率 {r_rate}")
print(f"ぼかし半径 {blur_radius}")
print(f"効果の強さ {STRENGTH}")
inkey = input("よろしいですか?")
if inkey not in ("y", "Y") :
print("実行を中止します。")
sys.exit()
if os.path.exists(sys.argv[2]):
print("\n出力ファイルが存在します。")
inkey = input("上書きしてよろしいですか?")
if inkey not in ("y", "Y") :
print("実行を中止します。")
sys.exit()
# 塗りつぶし色
# 白く塗りつぶす場合
#fill_color = (255, 255, 255)
# 黒く塗りつぶす場合
fill_color = (0, 0, 0)
# 画像を読み取り
im = Image.open(sys.argv[1])
# 円を描画する開始位置、終了位置を計算する
w,h = im.size
radius = max(w,h) * r_rate
w_start = (w / 2) - radius
w_end = (w / 2) + radius
h_start = (h / 2) - radius
h_end = (h / 2) + radius
# マスク画像を描画する
mask = Image.new("L", (w, h), STRENGTH)
draw = ImageDraw.Draw(mask)
draw.ellipse((w_start, h_start, w_end, h_end), fill=255)
mask_blur = mask.filter(ImageFilter.GaussianBlur(blur_radius))
# 塗りつぶし画像を作成する
plane = Image.new("RGB", (w, h), fill_color)
# 元の画像と、塗りつぶし画像を合成する
im2 = Image.composite(im, plane, mask_blur)
# 画像を表示
im2.show()
im2.save(sys.argv[2], quality=100)
上のスクリプトをUTF-8のエンコーディングで、toycamera.py という
Windowsだとコマンドプロンプト等を開いて、スクリプトを保存した
フォルダにcdコマンドで移動して、
python toycamera.py 入力画像名 出力画像名 塗り残す比率 ぼかし半径
で実行します。 実行すると、
以下の条件で処理を行います。
(中略)
よろしいですか?
という確認メッセージを表示するので、
Y をキー入力すると、ファイルを加工して出力します。
入力画像の例
出力画像の例
この例は、
塗り残す比率 : 0.4
ぼかし半径 : 40
で作成しました。
スクリプト内の、 STRENGTH を変更すると塗りつぶしの強さが変わります。
また、 fill_color を (0,0,0) から (255,255,255) に変更すると、
周辺を白く加工します。
金曜日の夕方に、近所のハードオフで、Washburn XB200という
エントリクラスのベースギターのジャンク品を\5500で購入しました。
先週の3連休に見つけたものですが、トーンの可変抵抗の
ナットが無く、ボディの中に落ちてしまっているため
ジャンク品ということでした。
お店にチューナーを持っていって、チューニングしてみたところ、
ブリッジを目いっぱい下げているのに、弦の高さがすごく高くて
その時は、購入を見送りました。
でも、持った感じが軽くて弾きやすそうな感じがしたし、
ネック自体はまっすくだったし、
ネックの裏側がグロス仕上げで高級感があったので、
気になっていました。
あと、ブリッジがGOTOH製のものが付いていて、
最悪、部品取りすれば、丸損にはならないというのもあります。
弦高の問題は、ネックとボディのジョイント部分にシムを
入れたら、治るのではと気がついたので、購入に至りました。
金曜の夕方に買って、表面を掃除して、ジョイントを
外すと、メーカーで入れたと思われるシムが既に入っていたの
ですが、ボディ側の木材がシムの形に凹んでいて、
シムを入れた意味が無くなってしまっていました。
手元にあった厚紙を3枚重ねてネックとボディの間に入れたら、
弦高が正常になったのですが、そこに至るまでに、
厚紙の枚数を変えてジョイントのネジを締めて
チューニングを合わせて・・・というのを
4回ぐらいやりました。
あとは、弦、ブリッジ、ボリューム、つまみ、ピックアップを止めるビス、
ピックアップ用クッション、ジャックを交換し、ペグがぐらつくので
グリスを少し入れて現在に至ります。
このベース、前ピックアップと後ピックアップ用に
ボリュームがあるのに、バランス用の可変抵抗も
付いているのが珍しいです。
バランス用の可変抵抗にコンデンサも付いているので、
ハイパスのトーンかと思ったのですが、使ってみると
PUバランスだったという。