ArtRage は、初期状態だと新規作成時に A4 や B5 といったサイズが用意されていません。
もっとも、カスタムサイズとして追加することが可能なので、それ自体はたいした問題ではないのですが、ひとつひとつ追加するのがちょっと手間でしたので、試しに自動生成するスクリプトを書いてみました。(動作は、 ArtRage4(4.0.4) で確認しました。)
使い方はこんな感じです。
$ python artrage_papersize.py A4 A5 B5 --dpi 300
上記の例では、
- A4 Land.spr … A4横 300dpi
- A4 Port.spr … A4縦 300dpi
- A5 Land.spr … A5横 300dpi
- A5 Port.spr … A5縦 300dpi
- B5 Land.spr … B5横 300dpi
- B5 Port.spr … B5縦 300dpi
というファイルがカレントフォルダに生成されます。
生成されたファイルは、必要に応じて ArtRage の Custom Sizes に保存してください。
artrage_paparsize.py
# !/usr/bin/env python
# -*- coding: utf-8 -*-
#
# ------------------------------------------------------------------ import(s)
import sys
import struct
import argparse
# ------------------------------------------------------------------- param(s)
ARTRAGE_HEAD = u"ARSizePresetFileVersion-1\r\n"
PAPER_SIZE = {
"A" : { "X" : 841, "Y" : 1189 },
"B" : { "X" : 1030, "Y" : 1456 },
}
MM_INCH = 0.03937
# ---------------------------------------------------------------- function(s)
# ============================================================================
##
#
def calc_size( fX, fY ):
return( fY / 2, fX )
# ============================================================================
##
#
def export_file( strFilename, fX, fY, nDPI ):
with open( strFilename, "wb" ) as hFile:
hFile.write( ARTRAGE_HEAD.encode( "utf-16-le" ) )
hFile.write( struct.pack( "BBBBIIf", 0x01, 0x34, 0x00, 0xFF, 4, 0, fX ) )
hFile.write( struct.pack( "BBBBIIf", 0x02, 0x34, 0x00, 0xFF, 4, 0, fY ) )
hFile.write( struct.pack( "BBBBIIf", 0x01, 0x31, 0x00, 0xFF, 4, 0, nDPI ) )
hFile.write( struct.pack( "BBBBIII", 0x00, 0x34, 0x00, 0xFF, 4, 0, 0 ) )
hFile.close()
# ============================================================================
##
#
def main():
oCParser = argparse.ArgumentParser( description = "ArtRage Paper Generator" )
oCParser.add_argument(
"paper",
help = "Set paper (ex: A4, B5)",
nargs = "+"
)
oCParser.add_argument(
"-d", "--dpi",
help = "Set dpi",
default = 300
)
oCParams = oCParser.parse_args( sys.argv[ 1: ] )
for strPaper in oCParams.paper:
if( len( strPaper ) != 2 ):
continue
if( strPaper[ 0 ].upper() not in ( "A", "B" ) ):
continue
try:
strP = strPaper[ 0 ].upper()
nSize = int( strPaper[ 1 ] )
nDPI = oCParams.dpi
except:
continue
fX = PAPER_SIZE[ strP ][ "X" ] * nDPI * MM_INCH
fY = PAPER_SIZE[ strP ][ "Y" ] * nDPI * MM_INCH
for nSplitCount in range( nSize ):
fX, fY = calc_size( fX, fY )
strFilenameP = "%s%d Port.spr" % ( strP, nSize, )
strFilenameL = "%s%d Land.spr" % ( strP, nSize, )
export_file( strFilenameP, fX, fY, nDPI )
export_file( strFilenameL, fY, fX, nDPI )
if( __name__ == "__main__" ):
main()
# ---------------------------------------------------------------------- [EOF]