Error in Pango while using cairo/librsvg
Hilmar Bunjes
newsgroup at silveraxe.de
Mon Jun 15 07:45:03 EDT 2009
Hi,
I try using Python (on Windows) with Cairo and librsvg to convert a svg
file to a png image. I got some help from the German python newsgroup to
get this running but now I run into some problems with pango I don't
know how to solve.
Running the python script in the console it tells me:
(python.exe:4908): Pango-CRITICAL **:
pango_win32_font_map_get_font_cache: assertion `font_map != NULL' failed
**
Pango:ERROR:pangowin32.c:838:pango_win32_font_finalize: assertion
failed: (win32font->fontmap != NULL)
This application has requested the Runtime to terminate it in an unusual
way.
Please contact the application's support team for more information.
The script I run is:
> #!/usr/bin/python
>
> from ctypes import *
> import cairo
> from rsvg_wrapper import rsvgClass
> from sys import argv
> from os.path import exists
> import getopt
>
> if __name__ == "__main__":
> opts, args = getopt.getopt (argv[1:], 'o:h',
> ['width=', 'height=', 'output=', 'help'])
> file = args[0]
>
> rsvg = rsvgClass()
>
> svg = rsvg.Handle (file = file)
> svgDimensionData=svg.get_dimension_data()
>
> if file[-4:] == ".svg":
> file = file[:-4]
> output = "%s.png" % file
> base = "%s%d.png"
> i = 1
> while exists (output):
> output = base % (file, i)
> i += 1
>
> width = svgDimensionData[0]
> height = svgDimensionData[1]
>
> surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, width, height)
> cr = cairo.Context (surface)
>
> wscale = float (width) / svgDimensionData[0]
> hscale = float (height) / svgDimensionData[1]
>
> cr.scale (wscale, hscale)
>
> svg.render_cairo (cr)
>
> surface.write_to_png (output)
and the rsvg_wrapper.py is:
> #some code to give rsvg.render_cairo(ctx) ability
> #on windows.
> import os
> try:
> import rsvg
> WINDOWS=False
> except ImportError:
> print"Warning, could not import 'rsvg'"
> if os.name == 'nt':
> print "Detected windows, creating rsvg."
> #some workarounds for windows
>
> from ctypes import *
>
> l=CDLL('librsvg-2-2.dll')
> g=CDLL('libgobject-2.0-0.dll')
> g.g_type_init()
>
> class rsvgHandle():
> class RsvgDimensionData(Structure):
> _fields_ = [("width", c_int),
> ("height", c_int),
> ("em",c_double),
> ("ex",c_double)]
>
> class PycairoContext(Structure):
> _fields_ = [("PyObject_HEAD", c_byte * object.__basicsize__),
> ("ctx", c_void_p),
> ("base", c_void_p)]
>
> def __init__(self, path):
> self.path = path
> error = ''
> self.handle = l.rsvg_handle_new_from_file(self.path,error)
>
>
> def get_dimension_data(self):
> svgDim = self.RsvgDimensionData()
> l.rsvg_handle_get_dimensions(self.handle,byref(svgDim))
> return (svgDim.width,svgDim.height)
>
> def render_cairo(self, ctx):
> ctx.save()
> z = self.PycairoContext.from_address(id(ctx))
> l.rsvg_handle_render_cairo(self.handle, z.ctx)
> ctx.restore()
>
>
>
> class rsvgClass():
> def Handle(self,file):
> return rsvgHandle(file)
>
I have the GIMP 2.6 bin folder in my path so all DLLs are used from that
folder.
I have no idea why the error is raised. I also tried to "import pango"
in the script but then it tells me:
> Traceback (most recent call last):
> File "svg2png2.py", line 41, in <module>
> svg.render_cairo (cr)
> File "...\rsvg_wrapper.py", line 45, in render_cairo
> l.rsvg_handle_render_cairo(self.handle, z.ctx)
> WindowsError: exception: access violation reading 0x00000008
Can anybody help my with the svg2png conversion here?
Thanks,
Hilmar
More information about the Python-list
mailing list