「Beats Flex ー fragment designスペシャルエディション」 Apple公式サイトで販売開始
11/03/2022
ChromebookのPythonで画像100枚を正方形に切り抜いたところ
本連載の67回目でChromebookにLinuxをセットアップして、Pythonを動かす方法を紹介したのは、2020年のことだった。あれから、ChromebookのOS「ChromeOS」も順調にバージョンアップを繰り返し、LinuxとChromeOSの親和性が向上して、より使いやすいものになっている。以前はLinuxで起動したWebサーバーやLinux上のファイルにアクセスするのに設定が必要で面倒だったが、現在では設定が不要になった。
筆者が使っているChromebookは2020年に4万円前後で購入した10インチのIdeaPad Duetだ。格安マシンながらブラウザで資料を見ながらLinux上のPythonでプログラムの作成や実行が問題なく使える。スペックがそれほど高くないので、メインマシンとしてはちょっと力不足に感じる場面もあるが、簡単なスクリプトを動かすだけなら十分に実用的だ。購入からそれなりに時間が経っているが、小さなカバンに入れて持ち運べるので普段から重宝している。
なお、唯一の不満点はLinux側の日本語入力だ。もちろん、Linux側にもIMEをインストールすれば日本語入力が使えるのだが、設定が複雑でうまく設定できなかったり何かとトラブルも多い。とは言え、既にChromeOS側にしっかりしたIMEが搭載されている。そこで、テキストの編集が必要な場面では、ChromeOS側にインストールしたテキストエディタを使うことができる。
そのため、プログラムや文章の作成はChromeOS側で行うことにし、PythonやLinuxのプログラムを実行するのにLinuxを使うと割り切ってしまうと快適に使える。ChromeOSの物足りなさを十分に補ってくれるのがLinuxであり、Linux側の問題点をChromeOSで補うことができるのだ。
なお、ChromebookでLinuxを有効にする方法だが、OSがバージョンアップして、前回紹介した時と手順が少し変わった。そこで、ここでも簡単にChromebookにLinuxをインストールする方法を確認しておこう。原稿執筆時点の最新のバージョン97.0.4692.102を利用した。
最初に、アプリの一覧からChromeOSの「設定アプリ」を開こう。
そして、設定アプリの画面左側にある「詳細設定」をタップしよう。次に、デベロッパーの中にある「Linux開発環境」の横にある[オンにする]ボタンをタップする。
すると「Linux開発環境をセットアップする」というダイアログが開くので、右下にある[次へ]ボタンを押そう。次に出る設定画面を確認したら「インストール」ボタンをタップしよう。すると、Linuxのイメージがダウンロードされて簡単にセットアップが完了する。
そして、アプリの一覧から「Linuxアプリ > ターミナル」を起動すると、仮想マシンのLinux(Debian)が起動する。
なお、ChromeOSの「ファイル」アプリを起動して、画面左側に出ている「Linuxファイル」をタップすると、Linux環境内のファイルにアクセスできる。
Linuxで「touch ファイル名」などとやって空ファイルを作り、ChromeOS側のテキストエディタでそのファイルを開けば編集が可能となる。なお、筆者が使っているエディタは、chromeウェブストアからインストールした「Text」というChromeアプリだ。
Chromebookの話が長くなってしまったが、今回のプログラムを作ってみよう。マルチプラットフォームで動作するPythonのプログラムなので、実際のところ、Win/Mac/Linuxと、どのOSでも動かすことができる。
今回作るのは、JPEG画像をリサイズして正方形に切り抜くというプログラムだ。大抵スマートフォンのカメラで撮影した写真は縦横の比率が3:4など長方形になる。しかし、Webサイトなどに掲載する場合、正方形だとデザイン的に配置しやすい場面も多い。そこで、今回作るプログラムは、Web掲載用に100枚の画像をPythonのプログラムで640x640ピクセルに切り抜くというものだ。
ここでは、画像処理のためにPillowモジュールを使うことにしよう。Chromebookには、最初からPythonがインストールされているが、パッケージマネージャーのpipコマンドやパッケージをビルドするための環境が入っていない。そこで、以下のコマンドを実行して必要なパッケージをインストールしよう。
# ChromebookのLinuxを使う場合sudo apt updatesudo apt install python3-pip build-essential libssl-dev libffi-dev python3-dev libjpeg-dev zlib1g-dev
また、多くのPython環境ではPillowが最初からインストールされているが、Chromebookではインストールされていない。以下のコマンドを実行してPillowをインストールしよう。
# Pillowのインストールpython3 -m pip install Pillow
そして、以下のプログラムが100個の画像ファイルを640x640の正方形に切り抜くプログラムだ。
import os, globfrom PIL import Image# 画像ディレクトリを指定 --- (*1)in_dir = './in_images'out_dir = './out_images'if not os.path.exists(out_dir): os.mkdir(out_dir)# JPEGファイルを列挙して処理する --- (*2)for file in glob.glob(in_dir+'/*.jpg'): img = Image.open(file) # 画像ファイルを読む # 正方形に切り抜く --- (*3) w, h = img.size # サイズを得る r = h if w < h: r = w img = img.crop(((w - r) // 2, (h - r) // 2,(w + r) // 2, (h + r) // 2)) # リサイズ --- (*4) img = img.resize((640, 640)) # ファイルに保存 --- (*5) savename = os.path.basename(file) img.save(os.path.join(out_dir, savename)) print("saved:", savename)
先に、プログラムを確認してみよう。(*1)では読み込み画像と出力画像のディレクトリを指定している。(*2)では読み込み画像の一覧を列挙する。Pillowを使って画像ファイルを読み込み、(*3)で正方形に切り抜く処理を行う。(*4)で640x640ピクセルにリサイズし、(*5)で出力画像のディレクトリに保存するという処理となる。
なお、プログラムの実行にあたり、画像ファイルをプログラムと同じディレクトリの「in_images」というフォルダにコピーしておこう。
そして、実行するには、ターミナルから以下のコマンドを実行する。
python3 resize.py
すると、正方形に切り抜いた画像が、out_imagesというフォルダ以下に生成される。
次いで以下のようなHTMLを表示するプログラムを作り実行してみると、HTMLが作成されるので、ブラウザで画像の一覧を確認できる。
import globhtml = ""for f in glob.glob("out_images/*.jpg"): html += ""open("a.html","wt").write(html)
以上、今回はChromebookでPythonを実行する方法を解説しつつ、100枚の画像を正方形に切り抜き指定サイズにリサイズするプログラムを作ってみた。もちろん、この手の作業を、画像編集ソフトを利用して手作業で切り抜くこともできるが、100枚も画像があったら膨大な時間がかかるに違いない。
なおベンチマークのため、「time python3 resize.py」を実行してみたところ、16.3秒で100枚の画像(1枚2MB程度のJPEG画像)を切り抜くことができた。(マシンスペックは、CPU: Helio P60T/2GHz, メモリ4GB。)格安のモバイル端末でありながら、Linux仮想マシンを動かし、その上で気軽に画像処理のプログラムを開発し動かせるのだから、つくづく良い時代になったなぁと思う。