トップ «前の日記(2012-06-23) 最新 次の日記(2012-06-25)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|

2012-06-24 [OSX][Python]QuartzとPythonスクリプト

Pythonをマスターする必要が出てきた。でも漠然と素のスクリプトの練習をしても仕方がないと思う。多分、PythonのWebアプリケーションのフレームワークを使ったサイトを立ち上げてみるのが要求に対する適切な対応だと思うが、ここはCocoa練習帳ですし、他とは少し違うスキルが必要という事で、QuartzツールをPythonスクリプトで制作する事に挑戦だ!

OS X Lion (10.7)には、2.7系列が組み込まれているようだ。

$ python -V
Python 2.7.1
$ python --version
Python 2.7.1
$ which python
/usr/bin/python

以前は、/Developer/Examples/Quartz/Python/API-SUMMARY にQuartz Python APIの文書があったようが、現在はない。

色々探してみて見つけたのがこれ。実は新しいXcodeインストール時に誤って古いXcodeを削除しなかったのだが、それがよかった。/Developer/Documentation/Python/ に情報があった。

早速、Retina以前のiPhone画面サイズの空のPDF書類「demo.pdf」を作成。

$ cat demo.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from CoreGraphics import *
 
# iOS size
mediaRect = CGRectMake(0.0, 0.0, 640.0, 960.0)
 
context = CGPDFContextCreateWithFilename("demo.pdf", mediaRect)
context.beginPage(mediaRect)
 
context.endPage()
context.finish()
 
# End Of File

このスクリプトを実行すれば、demo.pdfというファイルが生成されるのが確認できると思う。

空白ページだと寂しいので、赤色の四角形を描画。

$ cat demo.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from CoreGraphics import *
 
# iOS size
mediaRect = CGRectMake(0.0, 0.0, 640.0, 960.0)
 
context = CGPDFContextCreateWithFilename("demo.pdf", mediaRect)
context.beginPage(mediaRect)
 
context.setRGBFillColor(1.0, 0.0, 0.0, 1.0)
ourRect = CGRectMake(20.0, 20.0, 130.0, 100.0)
context.fillRect(ourRect)
 
context.endPage()
context.finish()
 
# End Of File

あれ、CGContextSetRGBFillColorに相当する箇所でエラーとなっている。

$ ./demo.py
Traceback (most recent call last):
  File "./demo.py", line 12, in 
    context.setRGBFillColor(1.0, 0.0, 0.0, 1.0)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/CoreGraphics/__init__.py", line 528, in setRGBFillColor
    def setRGBFillColor(*args): return _CoreGraphics.CGContext_setRGBFillColor(*args)
TypeError: in method 'CGContext_setRGBFillColor', argument 2 of type 'CGFloat'

何故だろう?


トップ «前の日記(2012-06-23) 最新 次の日記(2012-06-25)» 編集