Seite 1 von 1

Mac: Problem mit CoreGraphics Routinen

Verfasst: Mittwoch 21. Oktober 2009, 20:06
von sasmus
Hallo zusammen,

ich kann aus unerfindlichen Gründen auf dem Mac die CoreGraphics Funktion drawHTMLTextInRect aus python nicht (mehr) ausführen.

Core Graphics wird problemlos importiert und verschiedene andere CoreGraphics Funktionen funktionieren auch wie erwartet, lediglich die oben genannte bereitet Probleme und verabschiedet sich mit
"INIT_Processeses(), could not establish the default connection to the WindowServer.Abort trap"

Ändere ich drawHTMLTexInRect in drawPlainTextInRect, funktioniert das, natürlich mit der Einschränkung, dass der HTML-Code nicht mehr als HTML sondern als -eben- Plain Text interpretiert wird.

System: python 2.3.5, OS 10.4.11

Ich habe in der Vergangenheit die betreffende Funktion erfolgreich verwendet, daher gehe ich von irgendeinem Systemupdate aus, dass dies "zerschossen" hat.

Habe leider bisher keine Erklärung finden können.
Hat jemand eine Idee?

Danke

----snip Hier die (Test)-Routine----

Code: Alles auswählen

#!/usr/bin/python
import os, sys
from CoreGraphics import *

# size of image
w = 400	
h = 200

# get output filename
if len(sys.argv) < 2:
	print 'usage: %s outputfile.png' % sys.argv[0]
	sys.exit()

output = sys.argv[1]

html = '<html><body>Hello, this is a test.</body></html>'

c = CGBitmapContextCreateWithColor(w, h, CGColorSpaceCreateDeviceRGB(), (0, 0, 0, 0))
provider = CGDataProviderCreateWithString(html)
c.drawHTMLTextInRect(provider, CGRectMake(0, 0, w, h))
c.writeToFile(output, kCGImageFormatPNG)

Verfasst: Mittwoch 21. Oktober 2009, 22:50
von Darii
Da Apple die API inzwischen (10.6) anscheinend aufgeräumt hat (ich finde die von dir benutzen Funktionen nicht in der Doku) wäre eine Alternative, Webkit in Verbindung mit pyobjc zu benutzen. Siehe auch webkit2png, das müsste auch unter Tiger funktionieren.

Verfasst: Donnerstag 22. Oktober 2009, 19:43
von sasmus
Das ist sehr interessant, danke.

Ich glaube aber, dass das zum einen für das, was ich umsetzen will overkill ist (es geht nur um das einfache Formatieren von Strings auf dem Zielcontext) und zum anderen meine momentanen Fähigkeiten wohl nicht ausreichen, das umzusetzen.

Ich denke daher, sofern ich keine Lösung für die ursprüngliche Fragestellung finde die Routinen mit der für mich einfacheren CoreGraphics Methode drawPlainTextInRect umschreibe.

Es bleibt die Frage, warum gerade diese Routine nicht geht. Sie ist (bei mir, alte python Installation) in der Doku drin und die anderen Routinen desselben Moduls (CoreGraphics) funktionieren ja.

Danke auf jeden Fall, freut mich, hier auch als Forums-Newbie Hilfe angeboten zu bekommen. Toll.