大きさを変えてみる
前回のエントリで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ページ目しか変換できませんので、次はすべてのページに対して処理してみたいと思います。