damyarou

python, GMT などのプログラム

IPad Pythonista 3:写真をリサイズする (2021.09.26)

はじめに

IPad Pro を買った。iPad では PythonMacと同等には使えないので、せめてブログ(はてな)の更新ぐらいは iPad Pro でやろうと思った。 この場合、テキストを打ち込むくらいならどうにでもなるのであるが、iPad の標準機能では写真のリサイズができない。そこで iPad アプリである Pythonista 3 で画像サイズを変更するプログラムを作った。このプログラムではピクセルの横サイズは 800 に固定している。

このブログは、iPad Pro で書いてみたが、MacBook Air と接続した 27-inch display を用いながらの文書作成と比べると、やはり窮屈な気がする。しかしながら、iPad では、文字(表示領域)の拡大などは片手でスッとできるので、慣れによっては快適になるかもしれない。

使い方

使い方は以下の通り。

  • リサイズしたい写真は Files アプリの中に適当なフォルダを作成しそこにコピーしておく。
  • Pythonista 3 と Files を split view で開く。
  • Files アプリから写真が保存されているフォルダを選択し写真を見て表示。
  • 共有メニューのアイコン (四角に上矢印) を開き、Run Pythonista Script => Edit Script => プログラム (この場合 py_resize.py) を選択して実行。
  • 実行結果として、プログラムが格納されている Pythonista のフォルダにリサイズされた写真が保存される。ファイル名は、元の名前の前に ‘800_’ がつき、拡張子は ’jpg’ となっているはず。
  • Pythonista でリサイズされた写真を選択肢、Open in… を選択し、Save to Files で保存したいフォルダを選択肢実行。

写真を回転

写真を回転させたい時は、Files アプリの機能を使う。 写真の上で右クリック (長押し) ・メニューを表示し、回転(Rotate Left or Rotate Right) を選択•実行すれば良い。

トリミング

トリミングは写真アプリの機能で行う。写真アプリで写真を選択=>「編集」=>「トリミング」で矩形領域を選択して保存できる。元の画像がそのまま変更されるので、コピーを用いるなり最終的な加工画像を扱うなどの注意が必要。

写真事例

IPhone SEで撮った写真を、このプログラムを使ってリサイズしたもの。 IPad Pro 12.9-inch で split view。左は Pythonista 3、右は Files の画面。 MacBook Airは開いていない! f:id:damyarou:20210926122553j:plain

プログラム(py_resize.py)

import appex
import Image
import os

def main():

    if not appex.is_running_extension():
        print('Running in Pythonista app, using test image...')
        img = Image.open('IMG_0001.JPG')
        fpath= 'current'
    else:
        img = appex.get_image()
        fpath=appex.get_file_path()
    if img:
        # TODO: Your own logic here...
        print(fpath)
        print('(original)',img.format)
        print('(original)',img.size)
        fname=os.path.splitext(os.path.basename(fpath))[0]
        fw='800_'+fname+'.jpg'
        print(fw)
        width=800
        height=int(float(width)/float(img.size[0])*float(img.size[1]))
        img.thumbnail((width, height), Image.ANTIALIAS)
        img.save(fw, 'JPEG', quality=100, optimize=True)
        img=Image.open(fw)
        print( '(changed)',img.format)
        print('(changed)',img.size)

    else:
        print('No input image found')

if __name__ == '__main__':
    main()

以 上