Image Exporter for Fusion Charts

I wrote an image exporter for Fusion Charts while working for YouGov/Polimetrix, and someone recently asked if they could use it as well.

You’ll have to alter it a bit because it was written for a custom CherryPy-based framework. It works with Fusion Charts 3.1 (and 3.0 with trivial changes to the POST variables being read).

The only dependency is on PIL:

from StringIO import StringIO
import Image
import ImageColor
 
import cherrypy
 
def str2color(val):
    return ImageColor.getrgb('#'+val.ljust(6, '0'))
 
class SaveImagePage(LoggedInPage):  # Custom framework specific -- remove
    def control(self, page, meta_width='', meta_height='', meta_bgColor='ffffff', stream=''):
        # Convert 3.1 parameters to 3.0 style as they made more sense
        width = meta_width
        height = meta_height
        bgcolor = meta_bgColor
        data = stream
 
        # Split the data into rows using ; as the spearator
        rows = data.split(';')
 
        # Create image
        bgcolor = str2color(bgcolor)
        im = Image.new('RGB', (int(width), int(height)), bgcolor)
        imcore = im.load()
 
        for y, row in enumerate(rows):
            x = 0
 
            # Split row into pixels
            pixels = row.split(',')
            for pixel in pixels:
                # Split pixel into color and repeat value
                color, repeat = pixel.split('_')
                repeat = int(repeat)
 
                if color == '':
                    # Empty color == background color
                    color = bgcolor
                else:
                    # Pad color to 6 characters
                    color = str2color(color)
 
                while repeat:
                    # Add pixels 1-at-a-time since putdata() doesn't work
                    imcore[x, y] = color
                    x += 1
                    repeat -= 1
 
        # Save image into file like object
        imstr = StringIO()
        im.save(imstr, 'PNG', quality=100)
 
        # Set HTTP headers -- CherryPy specific code
        cherrypy.response.headers['content-type'] = 'image/png'
        cherrypy.response.headers['content-disposition'] = \
                'attachment; filename="Chart.png'
 
        # Return image as string, your framework may be different
        return imstr.getvalue()
This entry was posted in Open Source, Python, Technology and tagged , . Bookmark the permalink.
  • http://michael.susens-schurter.com/blog/2009/04/08/bitbucket-project-python-fusioncharts/ BitBucket Project for Python FusionCharts Code « michael schurter

    [...] michael schurter good good study, day day up « Image Exporter for Fusion Charts [...]