Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save moyashi/ec8f3dc1330ad847bb78fd28e06a42ba to your computer and use it in GitHub Desktop.
Save moyashi/ec8f3dc1330ad847bb78fd28e06a42ba to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# THETAで撮影した画像から自分を消すスクリプト for iOS Pythonista 3
import dialogs
import notification
import piexif
from PIL import Image
# 必要ライブラリ
# Pythonista 3ではstashのpip経由でpiexifをインストールする
# pillowは最初から入っているのでインストール不要
# pip install piexif
# THETAを三脚に固定
# myself_in_front_of_the_unit は自分がTHETAの前に立って撮影
# myself_behind_the_unit は自分がTHETAの後ろに立って撮影
# この2枚の全天球画像を使って自分を全天球画像から消す
# iOSではTHETAアプリから共有で(面倒だけど1枚ずつになる)
# ファイル.app宛に処理対象の画像を2枚書き出す。
# それをこのスクリプトの実行時に指定する。
# 処理済みの画像は、このスクリプトを置いたPythonista 3のフォルダにOUTPUT.JPGとして書き出される。
# Googleマップへのアップロードは、Web版のGoogleマップからする。
# アプリ版のGoogleマップだと、標準のアルバムからしかアップロードできないため。
def main():
notification.schedule('THETAの正面から撮影した写真を選択', 0)
file1 = dialogs.pick_document(types=['public.jpeg'])
myself_in_front_of_the_unit = file1
notification.schedule('THETAの背面から撮影した写真を選択', 0)
file2 = dialogs.pick_document(types=['public.jpeg'])
myself_behind_the_unit = file2
output = "OUTPUT.JPG"
notification.schedule('画像処理を開始', 0)
base_image = Image.open(myself_in_front_of_the_unit)
overlay_image = Image.open(myself_behind_the_unit)
height = base_image.height
width = base_image.width
left_overlay_image = overlay_image.crop((0, 0, int(width / 3), height))
right_overlay_image = overlay_image.crop((int(width / 3 * 2), 0, width, height))
base_image.paste(left_overlay_image)
base_image.paste(right_overlay_image, (int(width / 3 * 2), 0))
base_image.save(output, quality=95)
piexif.transplant(myself_in_front_of_the_unit, output)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment