; potrace_auto2.ahk ; ; ▽ 概要 ; bmp(またはpotraceが対応している画像ファイル)をアイコンにドロップすると、potraceを ; 使用して線画と彩色部分のパスを生成し、それぞれレイヤーに振り分けて1枚のsvgに合成します。 ; svgファイルは、入力元画像と同じ場所に"同じファイル名.svg"として保存されます。 ; ▽ 使い方 ; potraceとIrfanviewのインストールが必要です。下記のパス設定と異なる場合は修正してください。 ; Irfanviewはピクセル数取得に使うだけなので、Pluginセットのインストールは特に必要ありません。 ; 実行ファイルのパスを修正したら、このファイルはinkscape.exeと同じ場所に置いてください。 ; ショートカットやドロップで実行可能なランチャなどに登録してbmpをアイコンにドロップすれば ; サイズ入力ダイアログが開きます。 ; 初期設定は100pになっています(pは%のp)。50pや33.333pといった指定もできますが、 ; ピクセル数*(縮小率/100)の小数点以下は四捨五入されます。 ; 絶対ピクセル数でも指定できますが、その場合縦横比は正確に合わせなければ保持されません。 ; ピクセル数指定の場合は、640*480のようにして、単位は付けないで下さい。 ; okボタンを押すと変換が始まり、終了するまで何もダイアログは表示しません。 ; 変換が終わればInkscapeで変換されたファイルを開きます。 ; ▽ 仕様 ; 線画レイヤー(outline)はロックされています。彩色レイヤー(innnerfill)はグループ化が解除され ; 全パーツがバラバラの状態になっています。 ; レイヤー名や色を変更するには":label"や"#"で検索してください。 ; 2度続けて実行すると、2回目が失敗する場合があります。 #NoEnv SendMode Input ; /* 実行ファイルのフルパスが異なる場合は修正してください */ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; potrace = C:\Potrace\potrace.exe i_view = C:\Progra~1\IrfanView\i_view32.exe ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IfNotExist, %i_view% { MsgBox, 16, error, %i_view% not found. return }else IfNotExist, %potrace% { MsgBox, 16, error, %potrace% not found. return } If %0% = 0 { MsgBox, 16, error, inputfile not found. return } Loop %0%{ GivenPath := %A_Index% Loop %GivenPath%{ LongPath = %A_LoopFileLongPath% } } SplitPath, LongPath, name, dir, ext, noext if ext not in bmp,pbm,pgm,ppm { MsgBox, 16, error, 使用できるのは[ *.bmp | *.pbm | *.pgm | *.ppm ]だけです。`nファイルのフルパス = %1% return } IfExist, %dir%\%noext%.svg { MsgBox, 4401, ,既存の %dir%\%noext%.svg が有ります。`n上書きしますか? IfMsgBox, OK FileDelete, %dir%\%noext%.svg else return } InputBox, size, , Set size as Percentage or Width*Height px) of original. `n`ne.g.) 50p (or 1600*1200), , 340, 150, , , , ,100p if ErrorLevel <> 0 return IfInString, size, %A_Space% StringReplace, size, size, %A_Space%, , A ; /* Get Image dimensions */ image_info = %A_Temp%\image_info.txt IfExist, %image_info% FileDelete, %image_info% RunWait, "%i_view%" %1% /info=%image_info% Loop { FileRead, all_text, %image_info% if ErrorLevel <> 0 { Sleep, 1000 continue } else { Sleep, 200 break } } FileReadLine, pixels, %image_info%, 6 StringGetPos, pos_w, pixels, %A_Space%, L3 StringGetPos, pos_w_e, pixels, %A_Space%, L4 pos_w := pos_w+2 pos_w_e := pos_w_e+1-pos_w StringMid, px_org_w, pixels, %pos_w%, %pos_w_e% StringGetPos, pos_h, pixels, %A_Space%, L5 StringGetPos, pos_h_e, pixels, %A_Space%, L6 pos_h := pos_h+2 pos_h_e := pos_h_e+1-pos_h StringMid, px_org_h, pixels, %pos_h%, %pos_h_e% if size <> { IfInString, size, p { StringReplace, size, size, p, px_w := Round(px_org_w/(100/size)) px_h := Round(px_org_h/(100/size)) matrix := Round(size/1000, 6) } else IfInString, size, * { StringGetPos, pos, size, * StringMid, px_w, size, 1, %pos% pos := pos+1 StringTrimLeft, px_h, size, %pos% matrix := Round((px_org_w/px_w)/1000, 6) } } else{ px_w = px_org_w px_h = px_org_h matrix = 0.1 } cx := Round(px_w/2) cy := Round(px_h/2) if (px_h >= 430) { zoom := Round(430/px_h, 6) if (695 <= (px_w*zoom)) zoom := Round(695/px_w, 6) } else if (px_w > px_h) zoom := Round(695/px_w, 6) else zoom = 1.0 ; /* potrace */ Run, %potrace% -s -W%px_w%pt -H%px_h%pt %1% -o %A_Temp%\outline.svg, , Hide RunWait, %potrace% -s -W%px_w%pt -H%px_h%pt %1% -i -C#faf2df -o %A_Temp%\innerfill.svg, , Hide ; /* Make SVG */ FileAppend, ( Created by potrace 1.8, written by Peter Selinger 2001-2007 image/svg+xml ), *%dir%\%noext%.svg ; /* innerfill.svg読み込み */ Loop, Read, %A_Temp%\innerfill.svg, *%dir%\%noext%.svg { str = %A_LoopReadLine% if (str = "") break if RegExMatch(str, "(^[0-9]|)")<>1 continue IfInString, str, , ( %A_Space%%A_Space% %A_Space%%A_Space% %A_Space%%A_Space%%A_Space%%A_Space% ) } FileAppend, %str%`n } Sleep, 500 ; /* outline.svg読み込み */ Loop, Read, %A_Temp%\outline.svg, *%dir%\%noext%.svg { str = %A_LoopReadLine% if (str = "") break if RegExMatch(str, "(^[0-9]|)")<>1 continue IfInString, str, , ( %A_Space%%A_Space%%A_Space%%A_Space% %A_Space%%A_Space% ) } FileAppend, %str%`n } ; /* Run inkscape */ EnvSet, PATH, %A_ScriptDir%`;%A_ScriptDir%\python EnvSet, LANG, en EnvSet, TEMP, C:\Temp Run, inkscape.exe "%dir%\%noext%.svg", %A_ScriptDir% WinWaitActive, %noext%.svg - Inkscape ; /* Del TempFiles */ FileDelete, %image_info% FileDelete, %A_Temp%\outline.svg FileDelete, %A_Temp%\innerfill.svg Sleep, 1000 return