Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2011-11-05 17:44:23 (GMT)
committer Walter Bender <walter.bender@gmail.com>2011-11-05 17:44:23 (GMT)
commit7d8047386acfecf540d23d165dc123aa67ea5a16 (patch)
treee6751c5427c9532593a4e64b3037fb5bb5969973 /TurtleArt
parentebea2e093160429794c0ba49a5560c53adbc331c (diff)
using cairo.ImageSurface for saving png files
Diffstat (limited to 'TurtleArt')
-rw-r--r--TurtleArt/taexporthtml.py5
-rw-r--r--TurtleArt/tautils.py40
2 files changed, 28 insertions, 17 deletions
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()