use Data::Dumper;
use Cairo;
use Pango;
+use MIME::Base64;
use vars qw( @ISA @EXPORT );
}
+sub base64_png
+{
+ # Martin A. Hansen, December 2009.
+
+ # Extract a PNG stream from a Cairo::Surface object
+ # and convert it to base64 before returning it.
+
+ my ( $surface, # Cairo::Surface object
+ ) = @_;
+
+ # Returns a string.
+
+ my ( $png_data, $callback, $base64 );
+
+ $png_data = "";
+
+ $callback = sub { $png_data .= $_[ 1 ] };
+
+ $surface->write_to_png_stream( $callback );
+
+ $base64 = MIME::Base64::encode_base64( $png_data );
+
+ return $base64;
+}
+
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1;
# Returns a list.
- my ( @tracks, $i, @features, $feat, $elem, $file, $surface, $cr, @html, @img );
+ my ( @tracks, $i, @features, $feat, $elem, $surface, $cr, $png_data, @html, @img );
push @features, [ Maasha::BBrowser::Track::track_ruler( $cookie ) ];
push @features, [ Maasha::BBrowser::Track::track_seq( $cookie ) ];
push @features, [ Maasha::BBrowser::Track::track_feature( $tracks[ $i ], $cookie ) ];
}
- $file = "fisk.png"; # FIXME
-
$surface = Cairo::ImageSurface->create( 'argb32', $cookie->{ 'IMG_WIDTH' }, $cookie->{ 'TRACK_OFFSET' } );
$cr = Cairo::Context->create( $surface );
Maasha::BBrowser::Draw::draw_feature( $cr, $feat ) if $feat;
}
- Maasha::BBrowser::Draw::file_png( $surface, $file );
+ $png_data = Maasha::BBrowser::Draw::base64_png( $surface );
push @img, Maasha::XHTML::img(
- src => $file,
+ src => "data:image/png;base64,$png_data",
alt => "Browser Tracks",
height => $cookie->{ 'TRACK_OFFSET' },
width => $cookie->{ 'IMG_WIDTH' },