#!/usr/bin/perl # $Id$ use strict; use warnings; use Cairo; my $filename = $ARGV[0]; unless (-e $filename && -f $filename) { die "`$filename´ doesn't seem to be a file"; } open my $rfh, '<', $filename; my $surface = Cairo::ImageSurface->create_from_png_stream (sub { my ($closure, $length) = @_; my $buffer; if ($length != sysread ($rfh, $buffer, $length)) { die 'read-error'; } return $buffer; }); warn "status: " . $surface->status; close $rfh; open my $wfh, '>', $filename . '.bak'; $surface->write_to_png_stream (sub { my ($closure, $data) = @_; if (!syswrite ($wfh, $data)) { die 'write-error'; } }); close $wfh; warn "status: " . $surface->status;