SSブログ

RGB画像をCMYKに変換したい [AppleScript辞書はつくれるか?]

 

RGB画像をCMYKに変換する方法を考えてみる。

PhotoshopなどのAdobe製の画像ソフトを使えば簡単に変換ができるのですが、それは使わない方法を探してみようと思います。

 

-目次-

(1)ターミナルやシェルスクリプトから試してみる

(2)ColorSyncユーティリティを使う方法

(3)ColorSyncユーティリティをApplescriptでコントロールしてみる

(4)もっと簡単な方法がある

 

(1)ターミナルやシェルスクリプトから試してみる

 

色々なサイトで書かれているのがターミナルを使う方法。

 

$ sips -M JapanColor2001Coated.icc relative ~/Desktop/RGB.tif --out ~/Desktop/output.tif 

 

が、なぜか エラーを吐いてエラーを吐いて失敗する。

 

 

do shell script "sips -M JapanColor2001Coated.icc relative ~/Desktop/RGB.tif --out ~/Desktop/CMYK.tif ;"

 

当然、Applescriptを使っても失敗する。

 

image4.jpg

 

error "Error: Profile at JapanColor2001Coated.icc cannot be opened

Error: Invalid profile

Error 13: an unknown error occurred

Try 'sips --help' for help using this tool" number 13

 

JapanColor2001Coatedは使えないと出てくる。

 

そもそも、sipsコマンドが使えないのかと思えば、グレー変換(Generic Gray Profile.icc)は実験をしたら使えているので理由がわからない。

 

色々試行錯誤するも、

 

do shell script "sips -E 'sRGB Profile.icc' -M JapanColor2001Coated.icc relative ~/Desktop/RGB.tif --out ~/Desktop/CMYK.tif ;"

 

 

do shell script "a=`sips -g all ~/Desktop/RGB.tif | grep -e 'profile:' | cut -d ':' -f2- | cut -c2-` ; sips -E \"$a\" -M JapanColor2001Coated.icc ~/Desktop/RGB.tif --out ~/Desktop/CMYK.tif ;"

全て、JapanColor2001Coated.iccが使えないというエラーを吐く。

 

JapanColor2001Coated.iccがそもそもないのかと思い、ColorSyncユーティリティを見ると存在はする。

壊れているのかと思い修復も試みるが、修復が成功しているのにエラーは変わらない。

なので、この方法はめました。

ということで、別な方法を試みてみる事にします。

 

(2)ColorSyncユーティリティを使う方法

 

ColorSyncユーティリティというアプリケーションで変換してみる。

image1.jpg

 

image2.jpg

これなら、ちゃんと変換されているので保存をすれば終わり。

変換はすぐ終わりますが、これが複数あったら、繰り返しやらなければいけない。

ここはやっぱりApplescriptでやろう。

 

(3)ColorSyncユーティリティをApplescriptでコントロールしてみる

Applescriptでコントロールをすると言ってみたものの、じつは、ColorSyncユーティリティはApplescriptに非対応なのです。

 

image5.jpg

 

いきなり挫けたか?

いやいや、Applescriptに非対応と言っても、MacOS上で動いているアプリケーションであればなんとかなります。

直接ではなくSystem Eventsを使えばコントロールはできます。面倒ではありますけどね。

 

property colorProfileName : "Japan Color 2001 Coated" --変更したいICC profile


(* アプリケーションを直接に実行した直後の処理 *)

on run

    set choosedFiles to choose file with multiple selections allowed --ファイルを選択(複数選択が可能)

    my main(choosedFiles) --選択されたファイルをmainハンドラに送ります

end run

 

(* ドラック&ドロップされたファイルを処理します (スクリプトをアプリケーション形式で保存する必要があり) *)

on open inputFile

    my main(inputFile) --ドロップされたファイルをmainハンドラに送ります

end open

 

--

on main(inputFile)

    repeat with add in inputFile --複数または単体で送られてきたファイルを1つづつ選びながら繰り返します

        set f to my henkan(add) --henkanハンドラに選ばれた指定のファイルを送り、結果を変数fに受け取ります

        if ftrue then --結果のfの内容がtrue以外の場合は、if・・・end if の間のエラー処理をします

            activate --ダイアログを見やすくするためのアクティブ命令をあらかじめしておきます

            display dialog ("エラーが発生しました:" & return & f) buttons {"中止"} default button 1

            --> ダイアログでエラーメッセージを表示します

            return -- 中断します

        end if

    end repeat

end main

 

on henkan(add)

    try

        (* ファイルアドレスの変換 *)

        set filePath to add as text --送られてきたファイルをテキスト化することでアドレスのみを取得できる

        if filePath contains "/" then --アドレスがPosixPathだった場合

            set filePath to (filePath as POSIX file) as text -- ファイルパスに変更して統一します

        else if not (filePath contains ":") then -- PosixPathでもファイルパスでも無い場合

            return "ファイルのアドレスが確認できません" -- 中断してメッセージを返します

        end if

        

        tell application "Finder" -- Finderアプリケーションで作業します

            set originalName to name of file filePath -- 送られてきたオリジナルのファイル名を取得します

            copy file filePath to (folder of file filePath) -- オリジナルを壊さないために複製を作ります

            set obj to result -- 複製後のファイルの情報を記憶します

        end tell

        set filePath to obj as text -- 複製した方のファイルのパスを作業用として改めて取得します

        

        (* ColorSyncユーティリティで画像を開く *)

        tell application "ColorSync Utility" --ColorSyncユーティリティで作業をします

            launch --ColorSyncユーティリティの着手を宣言します(省略しても良さそう)

            try

                tell application "System Events" to click button 1 of window 1 of process "ColorSync Utility"

                --いらないウインドウがあれば閉じておきます

            end try

            open filePath --画像ファイルをColorSyncユーティリティで開きます

        end tell

        activate application "ColorSync Utility" --ColorSyncユーティリティを最前面に出します(アクティブ化)

        tell application "System Events" --システムイベントで作業をします

            tell process "ColorSync Utility" -- ColorSyncユーティリティのプロセスでの作業を選びます

                set ans to value of pop up button 1 of group 1 of window 1

                -- プロファイル設定の方向性のメニュー内容を取得します

                if ans ≠ "プロファイルに合わせる" then -- "プロファイルに合わせる"意外であれば再設定をしておきます

                    click pop up button 1 of group 1 of window 1 -- メニューを開きます

                    click menu item "プロファイルに合わせる" of menu 1 of pop up button 1 of group 1 of window 1

                    --選択しなおします

                end if

                set profileMenu to name of menu button 1 of group 1 of window 1

                --プロファイル設定のプルダウンメニューの現在の状態を取得

                if profileMenucolorProfileName then --希望のプロファイル以外だった場合の処理

                    click menu button 1 of group 1 of window 1 --プロファイル設定用のプルダウンメニューをクリック

                    key code 126 --キーボートの上向き矢印キー()を疑似入力

                    key code 124 --キーボートの右向き矢印キー()を疑似入力

                    try

                        click menu item colorProfileName of menu "出力" of menu item "出力" of menu 1 of menu button 1 of ¬

                            group 1 of window 1 --メニュー内の希望のプロファイルを選択

                    on error

                        return "Err : プロファイル名が認識できません。" --希望のプロファイルが見つからない場合は中断

                    end try

                    click button "適用" of group 1 of window 1 --適用ボタンをクリック

                    keystroke "s" using command down -- コマンド+S で『保存』を実行

                    

                    --close window 1 --|なぜかクローズ命令が受け付けてもらえない|

                    click button 1 of window 1 --なので、ウインドウ左上のクローズボタンをクリックして対応

                    

                end if

            end tell

        end tell

        tell application "Finder"

            set saveName to "" & (text 1 thru ((offset in originalName of ".") - 1) of originalName) & "』をCMYKに変更" & (text (offset in originalName of ".") thru -1 of originalName)

            --> saveName = "(元のファイル名)』をCMYKに変更.(拡張子)"

            try

                move (file saveName of (folder of file filePath)) to trash

                --すでにファイルが存在した場合、古いファイルはゴミ箱へ

            end try

            set name of file filePath to saveName --ファイル名の変更

        end tell

    on error errText

        return errText --予期しない何らかのエラ~メッセージを返します

    end try

    return true

end henkan

 

(4)もっと簡単な方法がある(結構あっさり解決)

 

Automator.appを使えば割とあっさりと簡単にはできるんです。

 

image3.jpg

 

Automatorで新規書類(新規アプリケーション)を作成します。

空のウインドウの上部に『入力してファイルやフォルダを受け取ります』とあるので、その下に、

左のライブラリー項目の中から『(ファインダの)Finder項目を複製』または『(ファインダの)Finder項目をコピー』をドラック&ドロップで追加します。(どちらでもOK)

 ※『Finder項目を複製』は元のファイルと同じフォルダ内に複製します。

 ※『Finder項目をコピー』は任意のフォルダにコピーをする違いがあります。

次に『(ユーティリティの)ColorSyncプロファイルをイメージに適応』を追加し、プロファイル:の項目を”Japan Color 2001 Coated”に変更する。

最後に『(ファインダの)Finder項目の名前を変更』を挿入し、ポップアップメニューの中から『テキストを追加』を選びます。

追加するテキスト:を『をCMYKに変更』にし、『名前の後に追加』に変更(ここは、自分の好みで変更してみると良い)

あとは保存するだけで、ドロップレットアプリケーションが作成されます

 

以上のいずれも、選択された画像がイメージファイル(画像ファイル)かどうかを判断する部分がありませんので、対象外のファイルが選ばれると予期せぬエラーが発生する場合があります。この辺りは注意するか、スクリプトを加えてみると良いかもしれません。


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。