Pixelmator Proの機能「ML Super Resolution」をAppleScriptから呼び出して、指定フォルダ内の画像をすべて超解像処理を行って、機械学習モデルをもとに解像度2倍化を行った画像を別フォルダに書き出すAppleScriptです。
超解像処理を行う対象は、別に画面のスナップショット画像でなくてもよいのですが、効果がわかりやすい用途です。
Keynoteに画面スナップショット画像を貼り付けていたときに、拡大倍率が上がると解像度が足りずに荒くなってしまいました。Retina環境で画面のスナップショットを取ると、けっこう綺麗に拡大できるのですが、等倍表示しかできない(&画面表示解像度を落とすことで2x Retina解像度で画面キャプチャ可能)環境なので、ちょっと困りました。
▲macOS 11.0、見た目の悪さで使う気が失せるはじめてのmacOS。12.0ではもう少しなんとかしてほしい。とくに、このダイアログ。ダイアログと見分けのつかないウィンドウ。ファイル保存ダイアログとかも
そこで、Pixelmator Proで画像のML Super Resolution機能(超解像機能)を用いてソフトウェアの力で画面スナップショット画像を高解像度化してみました。これが予想を超えていい感じだったので、指定フォルダ以下の画像をすべて処理するようにAppleScriptで処理してみました。
–> Download pixelmatorMLSuperResol(Script Bundle with libraries)
ML Super Resolution処理は自分の使っているIntel Mac(MacBook Pro 10,1)には荷の重い処理でささいな画像でも数秒かかりますが、おそらくApple Silicon搭載Macだと瞬殺でしょう。Core MLの処理が段違いに速いので。
▲オリジナル画像と超解像処理を行なった画像のファイルサイズの違い
本リストは実際にAppleScriptで開発を行う際に記述するコード量そのものを示したものです。本リストには2つのライブラリを利用していますが、ふだんはプログラムリストの再現性(実行できること)を優先して、ライブラリ部分もScript本体に一緒に展開しています。使い回ししている分も同じリストに展開しているので、「たくさん書かないといけない」と思われているようです。
実際には、共通部分はほとんど書いていないので、本処理もこんな(↓)ぐらいの記述量です。リアルな記述量を感じられるような掲載の仕方を考えなくてはいけないのかもしれません。本リストはその試みの第一歩です。
まー、超解像処理を行って72dpiの画面スナップショット画像を144dpiに上げているだけなんで、Retina Display環境で処理すれば不要なんですが、ソフトウェアだけで実現できるのはロマンを感じますし、無駄に2x Retina環境のスクリーンショットを処理して288dpiの高解像度画像に上げてみるとか。
ただ、WWDCのビデオなどを見ていると、画面のスナップショットそのものをベクターグラフィックで取るような仕組みも考えていそうな気配がします。当てずっぽうですが、そういう何かを考えていそうな….
AppleScript名:画面スナップショット超解像バッチ処理 v1 |
— – Created by: Takaaki Naganoya – Created on: 2021/03/25 — – Copyright © 2021 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions use cPathLib : script "choosePathLib" use imgPicker : script "imgPickerLib" –掃除 tell application "Pixelmator Pro" to close every document without saving –必要なパス情報をユーザーに問い合わせる set {inFol, outFol} to choose multiple path with titles {"Img Folder", "Output Folder"} set outFolStr to outFol as string –画像フォルダから画像のパス一覧を取得 set f1List to getFilepathListByUTI(POSIX path of inFol, "public.image", "alias") of imgPicker –取得した画像を超解像処理して repeat with i in f1List tell application "Pixelmator Pro" open i tell front document with timeout of 3000 seconds super resolution end timeout end tell end tell –新規保存ファイルパスの作成 set pathStr to POSIX path of i set filenameStr to (current application’s NSString’s stringWithString:(pathStr))’s lastPathComponent() as string set savePath to outFolStr & filenameStr tell application "Pixelmator Pro" save front document in file savePath as PNG tell front document close without saving end tell end tell end repeat |