日別アーカイブ: 2023/01/22

WebP conversion @ Automator

[CGImageDestinationCreateWithURL webp] で検索。
以下は一年前に書かれたものだけど。

ios – “unsupported file format ‘org.webmproject.webp'” while saving CGImage in webp format – Stack Overflow

#!/usr/bin/env python3

from Quartz import *

src_type = CGImageSourceCopyTypeIdentifiers()
CFShow(src_type)
dest_type = CGImageDestinationCopyTypeIdentifiers()
CFShow(dest_type)

macOS 13 Ventura でも非サポートなんですね。
どうやら OS 頼りは現状無理っぽい。

しかたがない、Python や PHP を使う。
WebP を使うような人ならどちらかは入れているはず。
これでコマンドを作って Automator で呼び出しする方法を。

PHP: imagecreatefromjpeg – Manual

ココでは Python3 を使う、PHP でやる人は上記サンプルコードを参考に。
Python3 では Pillow(PIL) が必要、残念ながら HEIF は未対応。

pip install Pillow

いつのまにか pip3 でなく pip でイケるようになってる。
python3 も 3 を打たなくていいようにしてよ、Fedora みたく。
そしてコマンドを書く。

#!/usr/bin/env python3

import sys, os, re
from PIL import Image

arg = sys.argv[1:]
for s in arg:
    if re.search(r'\.(jpe?g|png|gif)$', s, re.I):
        im = Image.open(s).convert('RGB')
        im.save(f'{os.path.splitext(s)[0]}.webp', 'webp')

を拡張子無し実行パーミッション有りでパスの通った場所に置く。
名前は img2webp とか解りやすい名前にしておく。

Automator で新規書類、クイックアクションを選択。
「指定されたFinder項目を取得」のアクションをドラッグで配置。
「シェルスクリプトを実行」を同様に配置。
ワークフローが受け取る現在の項目を「イメージファイル」に。
入力の引渡し方法を「引数として」に。
そしてシェルスクリプトに自作コマンドを呼び出すコードを。

# Automator は読み込まないのでフルパスをドットコマンド
# もちろん source コマンドでもいい
. /Users/sasakima-nao/.zprofile
. /Users/sasakima-nao/.zshrc
# 自分が付けたコマンド名にしてね
img2webp "$@"

automator

いや、~/.zshrc とかに何も登録していないなら読み込まなくていいけど。
Python 3.10 は ~/.zprofile に書き込みしているから呼び出せるのであって。
コレをしないと場合によっては古いバージョンを呼び出しとかしてしまう。
読み込まない又はパスを通していない場合は自作コマンドもフルパスにしてね。
とにかくコレを create_webp とか解りやすい名前で保存。

menu

困ったことにデジカメの RAW 画像でも出ちゃうんだなこれが。
なので拡張子で振り分けする処理は必須です、おしまい。
このスクリーンショットはコレで変換した WebP 画像でした。