大きさを変えてみる

前回のエントリでJPEGのサイズを決めうちにしてました。これじゃまずいので、PDFのページサイズを取得してJPEGのサイズを決めたいと思います。

ページサイズは

getMediaBox(page)

というメソッドで取得できます。
とりあえず、こんなスクリプトになりました。

002test.py

from CoreGraphics import *

colorSpace = CGColorSpaceCreateDeviceRGB ()
pdf = CGPDFDocumentCreateWithProvider ( CGDataProviderCreateWithFilename ( "in.pdf" ) )
r = pdf.getMediaBox( 1 )

width=long( r.size.width )
height=long( r.size.height )

ctx = CGBitmapContextCreateWithColor ( width, height, colorSpace, ( 0, 0, 0, 0 ) )
ctx.drawPDFDocument ( r, pdf, 1 )
ctx.writeToFile ( "out.jpg", kCGImageFormatJPEG )

pdf.getMediaBox(1)は1ページ目のサイズをCGRectとして取得しています。これは矩形を表現するもののようです。
縦/横の実際の長さは、size.width、size.heightとして取得すればOKです。

上のスクリプトではwidth、heightをlongにキャストしていますが、これはCGBitmapContextCreateWithColorの引数としてはlongの必要があるからです。(たぶんね)

ここまで解ってくると、次は拡大/縮小なんかがやりたくなってきますよね?(笑)これを実現するためには、CGAffineTransformを使います。

transform = CGAffineTransformMakeScale( xratio, yratio )

2倍の大きさに拡大したい時は、xratioとyratioに2を指定します。縦に2倍に引き延ばしたい場合はxratioに1を、yratioに2を指定します。お気軽ですねー。

で、こいつをさっきのスクリプトに加えてやるとこうなります。これは大きさを3倍に拡大したJPEGを生成します。

003test.py

from CoreGraphics import *

colorSpace = CGColorSpaceCreateDeviceRGB ()
pdf = CGPDFDocumentCreateWithProvider ( CGDataProviderCreateWithFilename ( "in.pdf" ) )
r = pdf.getMediaBox( 1 )

transform = CGAffineTransformMakeScale( 3.0 , 3.0 )
r = r.applyAffineTransform( transform )

width=long( r.size.width )
height=long( r.size.height )

ctx = CGBitmapContextCreateWithColor ( width, height, colorSpace, ( 0, 0, 0, 0 ) )
ctx.drawPDFDocument ( r, pdf, 1 )
ctx.writeToFile ( "out.jpg", kCGImageFormatJPEG )

いい感じです。ただこれでは1ページ目しか変換できませんので、次はすべてのページに対して処理してみたいと思います。