スポンサーサイト

Tags :
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

イラレ9用画像配置スクリプト

■追記
このエントリのスクリプトは特定の業務に合わせて作成した、限られた環境でのみ動作する全く汎用性の無いものです。以下のリンクに、もう少し汎用性のあるスクリプトがありますのでよろしければどうぞ。
『イラレで画像を並べて配置するAppleScript』


デザイナーと話ししてて、単一レイアウトで数十ページの商品カタログの写真(300点くらい)を貼り込むのがめんどくさいとか言っていたので、ちょっとAppleScript組んでみました。

property cr : (ASCII character 13)
property itemsPerPage : 13
property pSize : 100 

on open drop
   tell application "Finder"
      
      set fileList to {}
      repeat 100 times
         set beginning of fileList to 0
      end repeat
      
      set countMax to 0
      set countMin to 100
      
      repeat with theFile in drop
         set fName to name of theFile
         set fPath to theFile as alias
         if fName contains "_" then
            set ofstFN to offset of "_" in fName
            set theNum to text (ofstFN + 1) thru (ofstFN + 2) of fName as integer ---integerと明示しないと正しく計算されない
            
            ----画像ファイル名が連番の場合
            set t to character (ofstFN + 3) of fName
            if (t is "・") or (t is "~") then
               set seqNum to text (ofstFN + 4) thru (ofstFN + 5) of fName as integer
               if seqNum > countMax then set countMax to seqNum
               repeat with i from (theNum + 1) to seqNum
                  set item i of fileList to fPath
               end repeat
            end if
            ----
            
            if theNum > countMax then set countMax to theNum
            if theNum < countMin then set countMin to theNum
            set item theNum of fileList to fPath
         end if
      end repeat
      
      if countMin is countMax then
         display dialog "配置する画像番号 " & countMin & "番"
      else
         display dialog "配置する画像番号 " & countMin & "番~" & countMax & "番"
      end if
      
      my check_Documents(fileList, countMax, countMin) ----配置に必要なレイアウトが開かれているかチェック
      
   end tell
   
   
   tell application "Adobe Illustrator 9.0.2"
      activate
      set docCount to count of documents
      repeat with i from 1 to docCount
         set docRef to document i
         
         if layer "メーカー通し番号" of docRef exists then
            tell layer "メーカー通し番号" of docRef
               set pageNum to contents of text art item 1
               --display dialog "メーカー通し番号" & pageNum & "に配置します"
            end tell
            
            tell layer "画像配置ナンバー" of docRef
               set countTXT to count of text art item
               repeat with repNUM from 1 to countTXT
                  set targetNum to contents of text art item repNUM
                  set {Xpos, Ypos} to position of text art item repNUM
                  set fPath to item targetNum of fileList
                  
                  if fPath is not 0 then
                     set contents of text art item repNUM to "配置"
                     set placedRef to make new placed item in layer "画像配置ナンバー" of docRef with properties ツ
                        {file path:fPath, position:{Xpos, Ypos}}
                     -----画像の大きさが『pSize』以上の場合は縮小
                     set H to height of placedRef
                     set W to width of placedRef
                     if H > pSize or W > pSize then
                        if H > W then
                           set ELG to pSize / H * 100
                        else
                           set ELG to pSize / W * 100
                        end if
                        scale placedRef horizontal scale ELG vertical scale ELG about top left
                     end if
                     ------
                  end if
               end repeat
               
               repeat with t from countTXT to 1 by -1
                  --display dialog text of text art item t
                  if contents of text art item t contains "配" then delete text art item t
               end repeat
               
            end tell
            
         end if
      end repeat
      beep
      display dialog "終了しました。" with icon 1 buttons {"OK"} default button 1
   end tell
   
end open


on check_Documents(fileList, countMax, countMin)
   set pageMax to (countMax div (itemsPerPage + 0.1))
   set pageList to {}
   repeat with i from 0 to pageMax
      set beginning of pageList to "no"
   end repeat
   
   repeat with i from 1 to countMax
      if item i of fileList is not 0 then
         set n to i div (itemsPerPage + 0.1) + 1
         set item n of pageList to n
      end if
   end repeat
   
   --display_Lists("ファイルに対応するページ(noはダミー)" & cr, pageList)
   
   tell application "Adobe Illustrator 9.0.2"
      
      set docCount to count of documents
      if docCount is 0 then
         beep
         display dialog "Illustratorのファイルが開かれていません。" with icon 2
         error number -128
      else
         repeat with i from 1 to docCount
            set docRef to document i
            if layer "メーカー通し番号" of docRef exists then
               set pageNum to contents of text art item 1 of layer "メーカー通し番号" of docRef
               set pageCount to count of pageList
               --display dialog "メーカー通し番号 " & pageNum & cr & "pageListの項目数 " & pageCount
               if pageCount ウ pageNum then set item pageNum of pageList to "True"
            end if
         end repeat
      end if
   end tell
   
   --display_Lists("必要なページのステータス" & cr & "(番号が表示されている場合はNG)", pageList)
   
   set chkResult to ""
   set NGflag to 0
   repeat with t in pageList
      if not ((t contains "True") or (t contains "no")) then
         set NGflag to 1
         set chkResult to chkResult & "メーカー通し番号 " & "0" & t & cr
      end if
   end repeat
   if NGflag is 1 then
      beep
      display dialog chkResult & cr & "の流し込みベースが開かれていません。" with icon 2 buttons {"OK"} default button 1
      error number -128
   end if
   
end check_Documents


on collect_Lists(theList, countMax)
   set tmpList to {}
   repeat with i from 1 to countMax
      set tmpList to tmpList & item i of theList
   end repeat
   return tmpList
end collect_Lists


on display_Lists(remTxt, theList)
   set myResult to ""
   repeat with aElement in theList
      set myResult to myResult & aElement & cr
   end repeat
   display dialog remTxt & cr & myResult
end display_Lists


商品スペックやJANコード、コピー等のテキスト部分は、メーカーが用意したExcelのドキュメントからIllustratorのプラグインを使って流し込むらしいので、その後で画像用の番号があらかじめ振られたレイヤーに自動で画像を配置していきます。

このスクリプトを使う段階で、すでに商品写真以外の部分は出来上がっているので、後は位置決め用の番号に合わせて配置していくだけ。
画像ファイルはメーカー毎のフォルダに数十点入っていて、それらを一度に処理します。



レイアウトの左側にある赤い番号が画像の位置決め用番号(レイヤ名『画像配置ナンバー』)で、画像のファイル名に含まれる番号に対応させてあり、配置した後番号は消去します。



もちろんテンプレートには画像配置用のレイヤや位置決めの為のオブジェクト等、きっちり決めておく必要があって、汎用性は無いに等しいので別の仕事では大幅に作り替えないと使い物にならないんですが。

ホントはスクリプトでガンガン自動化・・・と行きたいんですが、DB使って組むような物は、EDIANなんかで既に仕組みが出来上がってたりするので、結局イラレで使うようなスクリプトは単発モノばっかりになるんですよね。
関連記事
スポンサーサイト

コメント

非公開コメント

Profile
choco
Author : choco

印刷・製版の現場を経て、広告制作会社でPhotoshopを使ったビジュアル制作を担当。

→現在は車載機器開発ベンダにて、組み込み3Dデータ作成やUIデザインなどを行っています。

Categories
Favorites


Search
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。