sips

macOSには「Image Events」という裏方のアプリケーションがあって、AppleScriptからも利用することができます。以下はその機能の一部です。

 

save v : Save an image to a file in one of various formats

save specifier : the object for the command

[as BMP/‌JPEG/‌JPEG2/‌PICT/‌PNG/‌PSD/‌QuickTime Image/‌TIFF] : file type in which to save the image ( default is to make no change )

[icon boolean] : Shall an icon be added? ( default is false )

[in text] : file path in which to save the image, in HFS or POSIX form

[PackBits boolean] : Are the bytes to be compressed with PackBits? ( default is false, applies only to TIFF )

[with compression level high/‌low/‌medium] : specifies the compression level of the resultant file ( applies only to JPEG )

 

rotate v : Rotate an image

rotate specifier : the object for the command

to angle real : rotate using an angle

 

scale v : Scale an image

scale specifier : the object for the command

[by factor real] : scale using a scalefactor

[to size integer] : scale using a max width/length

 

 

つまり、Image Eventsを使って、AppleScriptをユーザーの窓口にすれば、ちょっとした画像形式変換ソフトが作れるわけです。書き出せる形式は、上の通り、「BMP JPEG JPEG2 PICT PNG PSD QuickTime Image TIFF」と、とりあえずは困らないくらいの幅広さはあります。画像の回転やサイズ変更、切り取りも可能です。‥‥PICTはさすがにもう使わんけど。

 

AppleScriptに慣れない場合は、シェル経由の「sips」コマンドでも同じことが可能です。AppleScriptとImage Eventsの組み合わせだととかくスクリプト文が長くなりがちですが、シェルならば多少冗長にはなりますが1行で済みます。

 

まずは「man sips」でマニュアルに目を通してみれば、結構な画像変換ができることがわかります。「sips -h」や「sips -H」でも、色々なオプションが確認できます。‥‥文量が多いので、ここではあえて引用しませんが。

 

処理できる内容を見てみると、どうもImage Eventsとsipsは同じもの‥‥なんでしょうかね。その辺の内部事情は知らないので何とも言えませんが、できることは共通しています。

*ただ、Image Eventsの方の用語辞書をみると(上記の)、Targaが抜けてますね。書き忘れ?

 

 

 

例えば、中に144ファイルのPSD連番が入ったフォルダを丸ごとJPEGに変換する‥‥なんていうのも1行コマンドで簡単に、しかも144ファイルの2KサイズPSD程度なら数秒で処理できます。

 

sips -s format jpeg PSD連番フォルダパス/*.psd --out 書き出すフォルダパス

 

JPEGの圧縮率なども指定可能ですが、まずは簡単な1文にて。

 

フォルダの中身はもう自分で承知しているから大丈夫‥‥という人は、

 

sips -s format jpeg PSD連番フォルダパス/* --out 書き出すフォルダパス

 

‥‥という書き方でもOKです。/* はフォルダの中身全部‥‥という意味です。

 

アニメ現場ではおなじみのTargaも書き出せます。

 

sips -s format tga PSD連番フォルダパス/* --out 書き出すフォルダパス

 

ただし、Targaで書き出すと、解像度は72dpi‥‥というか「値無し」になります。アニメ業界でこれだけ常用されているのに意外に思いますが、Targaにはもともと「平方あたりの画素・ドットの数」という概念がありません。ビデオに特化したフォーマットだったらしく、印刷とか実物スキャンは全く考慮されていないのです。

*ただ、Targaには「開発者が使えるデータ領域」があるので、そこに独自拡張で解像度を記録することはできると思います。でもまあ、あくまで独自拡張なので一般では通用しないですけどネ。

 

 

コマンドは使い続けていないとすぐに忘れてしまいがちなので、そんな時はAppleScriptと組み合わせて、ドラッグ&ドロップのJPEG書き出しドロップレットを作ってしまいましょう。

 

処理するフォルダと新作するフォルダをAppleScriptのFinder命令で指定して、POSIX Path(スラッシュ区切りのUNIX形式のパス)に変換して、シェルに渡します。

 

どうせなので、アプレットとドロップレット両方で動作するアプリケーションにします。

 

on run

    tell application "Finder"

        set importFolder to choose folder with prompt "変換するフォルダを指定"

        set exportFolder to choose folder with prompt "書き出すフォルダを指定"

    end tell

    my saveAsJPEG(importFolder as Unicode text, exportFolder as Unicode text)

end run

 

on open theItems

    repeat with theItem in theItems

        set importItem to theItem as Unicode text

        tell application "Finder"

            if folder importItem exists then

                make new folder at container of theItem with properties {name:((name of theItem) as Unicode text) & "-JPEG"}

                set exportItem to result as Unicode text

            else

                set exportItem to ((characters 1 thru -((length of ((name extension of theItem) as Unicode text)) + 2) of importItem) as Unicode text) & ".jpg"

            end if

        end tell

        my saveAsJPEG(importItem, exportItem)

    end repeat

end open

 

to saveAsJPEG(_i, _e)

    set _all to ""

    if character -1 of _i is ":" then set _all to "*"

    do shell script "sips -s format jpeg " & (quoted form of POSIX path of (_i as Unicode text)) & _all & " --out " & (quoted form of POSIX path of (_e as Unicode text))

end saveAsJPEG

 

 

このスクリプト文にテキトーな名前をつけてアプリケーション形式で保存すれば、ダブルクリックでもドラッグ&ドロップでも動作する、自作のmacOS用アプリの完成です。

 

 

シェルに投げるまでのお膳立てをAppleScriptとFinderでおこなう仕組みですので、実は肝心の「画像形式変換」の部分は1行のみです。アプリを作るのは前置きが長いのです‥‥って、これでもかなり短い部類です。

 

ブログにちょろっとペーストできるほど短い文で済んでいるのは、なによりも「エラー対策」をほぼ全部端折っているからです。もし、同階層に同じ名前のフォルダやJPEGファイルがあった場合はエラーで止まりますし、アイテムを分別する条件分岐もアマアマです。テキストファイルをドロップしても動作を開始してしまう構造です。

 

でも、作った本人だけが使う分には問題はありません。自分で文を書いて作ったがゆえに、隅々まで処理内容を知っているので、うっかりでもない限り、エラーを自ら呼び込む使い方をしないからです。

 

 

まあ、2019年現在にAppleScriptを覚えよう!‥‥なんて薦めませんが、何かしらのプログラム・スクリプト言語を日頃から手に馴染ませておくことで、自分で使うための自分専用アプリを、思いついた時、もしくは必要に迫られた時に、サクッと作れるのは、コンピュータを使う醍醐味・利点でもあります。

 

‥‥そういえば、sipsはTargaも書き出せますから、画像連番を一気にTargaに変換するのも作っておきましょう。

 

on run

    tell application "Finder"

        set importFolder to choose folder with prompt "変換するフォルダを指定"

        set exportFolder to choose folder with prompt "書き出すフォルダを指定"

    end tell

    my saveAsTarga(importFolder as Unicode text, exportFolder as Unicode text)

end run

 

on open theItems

    repeat with theItem in theItems

        set importItem to theItem as Unicode text

        tell application "Finder"

            if folder importItem exists then

                make new folder at container of theItem with properties {name:((name of theItem) as Unicode text) & "-TARGA"}

                set exportItem to result as Unicode text

            else

                set exportItem to ((characters 1 thru -((length of ((name extension of theItem) as Unicode text)) + 2) of importItem) as Unicode text) & ".tga"

            end if

        end tell

        my saveAsTarga(importItem, exportItem)

    end repeat

end open

 

to saveAsTarga(_i, _e)

    set _all to ""

    if character -1 of _i is ":" then set _all to "*"

    do shell script "sips -s format tga " & (quoted form of POSIX path of (_i as Unicode text)) & _all & " --out " & (quoted form of POSIX path of (_e as Unicode text))

end saveAsTarga

 

 

数カ所変更するだけで、主要な画像形式のファイルを連番丸ごと変換するmacOSアプリの出来上がりです。

 

 

 

ちなみに、今回は画像保存時のオプションを一切省いていますが、JPEGなら圧縮率とかTIFFならLZW圧縮の有無とかを指定できます。拡大縮小や、回転(現場ではあまり必要ないけど)なども処理できます。

 

 



calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
25262728293031
<< August 2019 >>

selected entries

categories

archives

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM