From 7d8047386acfecf540d23d165dc123aa67ea5a16 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Sat, 05 Nov 2011 17:44:23 +0000 Subject: using cairo.ImageSurface for saving png files --- (limited to 'TurtleArt') diff --git a/TurtleArt/taexporthtml.py b/TurtleArt/taexporthtml.py index 843b8b0..913e612 100644 --- a/TurtleArt/taexporthtml.py +++ b/TurtleArt/taexporthtml.py @@ -111,7 +111,10 @@ def save_html(self, tw, embed_flag=True): HTML_GLUE['div'][1] else: if embed_flag: - imgdata = image_to_base64(save_picture(self.tw.canvas), + tmpfile = os.path.join(get_path(tw.activity, 'instance'), + 'tmpfile.png') + save_picture(self.tw.canvas, tmpfile) + imgdata = image_to_base64(tmpfile, get_path(tw.activity, 'instance')) else: imgdata = os.path.join(self.tw.load_save_folder, 'image') diff --git a/TurtleArt/tautils.py b/TurtleArt/tautils.py index 2d1ac5f..a402563 100644 --- a/TurtleArt/tautils.py +++ b/TurtleArt/tautils.py @@ -20,6 +20,7 @@ #THE SOFTWARE. import gtk +import cairo import pickle import subprocess import os.path @@ -260,16 +261,26 @@ def do_dialog(dialog, suffix, load_save_folder): return _result, load_save_folder -def save_picture(canvas, file_name=''): - """ Save the canvas to a file. """ - _pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, canvas.width, - canvas.height) - _pixbuf.get_from_drawable(canvas.canvas.images[0], - canvas.canvas.images[0].get_colormap(), - 0, 0, 0, 0, canvas.width, canvas.height) - if file_name != '': - _pixbuf.save(file_name, 'png') - return _pixbuf +def save_picture(canvas, file_name): + """ Save the canvas to a file """ + x_surface = canvas.canvas.get_target() + img_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, + canvas.width, canvas.height) + cr = cairo.Context(img_surface) + cr.set_source_surface(x_surface) + cr.paint() + img_surface.write_to_png(file_name) + + +def get_canvas_data(canvas): + x_surface = canvas.canvas.get_target() + img_surface = cairo.ImageSurface(cairo.FORMAT_RGB24, + canvas.width, canvas.height) + cr = cairo.Context(img_surface) + cr.set_source_surface(x_surface) + cr.paint() + return img_surface.get_data() + def save_svg(string, file_name): @@ -307,13 +318,10 @@ def get_path(activity, subpath): "org.laptop.TurtleArtActivity", subpath)) -def image_to_base64(pixbuf, path_name): +def image_to_base64(image_path, tmp_path): """ Convert an image to base64-encoded data """ - file_name = os.path.join(path_name, 'imagetmp.png') - if pixbuf != None: - pixbuf.save(file_name, "png") - base64 = os.path.join(path_name, 'base64tmp') - cmd = "base64 <" + file_name + " >" + base64 + base64 = os.path.join(tmp_path, 'base64tmp') + cmd = "base64 <" + image_path + " >" + base64 subprocess.check_call(cmd, shell=True) file_handle = open(base64, 'r') data = file_handle.read() -- cgit v0.9.1