use strict; use warnings; use MIME::Base64; use Digest::MD5 'md5_hex'; open (my $image, 'Z:\capture.png') or die "$!"; binmode $image; my $raw_string = do{ local $/ = undef; <$image>; }; my $encoded = encode_base64( $raw_string ); my $decoded = MIME::Base64::decode_base64($encoded); my $rawmd5 = md5_hex( $raw_string ); my $decmd5 = md5_hex( $decoded ); warn sprintf( "raw != decoded (%s vs %s)\n", $rawmd5, $decmd5 ) if ( $rawmd5 ne $decmd5 ); open my $fho, '>', 'Z:\photo.png' or die $!; binmode $fho; print $fho $decoded;