Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Store image in string

by tamaguchi (Pilgrim)
on Mar 14, 2011 at 01:45 UTC ( [id://893016]=perlquestion: print w/replies, xml ) Need Help??

tamaguchi has asked for the wisdom of the Perl Monks concerning the following question:

Hello fellow perlmonks. I have a problem I want to store a binary image like .gif or .jpg in a string in a script so that when I run the script the image will be created. I have tried store the content of a jpg file in a string and print it out in a new file but it is not working any suggestions how to do this? I tried among other things the code bellow which is not working:
#!/usr/bin/perl -w my $file = "blopp.gif"; binmode STDOUT; $var='GIF89a + ! , %IT8˴y`4EPT|oUF ;' +; open(OUTFILE, '>blopp.gif') or die "Could not open blopp.gif"; print OUTFILE $var; close(OUTFILE);

Replies are listed 'Best First'.
Re: Store image in string
by GrandFather (Saint) on Mar 14, 2011 at 02:18 UTC

    You can't do that like that. Most image file formats are binary files with a particular structure that can't be directly represented in Perl. It is possible however to encode images files using base64 or similar schemes and decode back to an internal binary form for use as a binary image file:

    use strict; use warnings; use MIME::Base64 qw(); my $image64 = <<IMAGE64; R0lGODlhQQA8APcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAA +BVMwBV ZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMw +DVZgDV mQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZj +MrmTMr zDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmT +OqzDOq /zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYAmWYAzG +YA/2Yr AGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2 +aqAGaq M2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJ +kAM5kA ZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5 +mAZpmA mZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zp +n/mZn/ zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmc +xVzMxV /8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzM +zV/8z/ AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r// +9VAP9V M/9VZv9Vmf9VzP9V//+AAP+AM/+AZv+Amf+AzP+A//+qAP+qM/+qZv+qmf+qzP+q///VAP +/VM//V Zv/Vmf/VzP/V////AP//M///Zv//mf//zP///wAAAAAAAAAAAAAAACH5BAEAAPwALAAAAA +BBADwA AAj/AA8AABDjwAoDAA7GIBgAxsIYCw3eiKGiYAyHCiEegEjQIkeIMQyo2Nixo8CHA0dqgT +hSTMeJ Gy82vBjjxsEwGkE6zLkwzEuQMQLcCNMwgIGDKwAcGDkwpkiBMJYudTiyJsgAQGOsuKFi4s +edQA2I 6br1wJaoIAFEdbj0IoCiBN/C8Nr2KMEDOGN69IrDaladfSV1DQux6A2hC8XAiHtj54qHIb +cO3RIT LMStf29shAkxb9aKBGFsXbE4wECUOS1fhjgU5NAbE2+I8es1Rt8YYrzWtqhZY1y8BeNa7V +gwjAGI BnYTFxNmy+wYW6DjiD4RZ+e/xit+PP5ReEcYimdv/42e1WsYHLNjz85tlb3V235x60wLOQ +bO41Wx WjZwu28YGXyBZF1NYawnn4Dm/WUVdxzZVV8YMe1mH0TP2cccbjf4J4NtYcg2FA7WyYBTAD +hUFx9I xxl0AHcATKTagB7KZqFsudUYAxoF4ubcgTiJgcNOvf0lnIM1PeYUbrOhR+EWHm4hiRjMcY +Ekh+h9 uJ6HE0LEJHJATaRCR8cpFQZOYaxQYmew5VYlIzeImGGBOIrBpJw52lhgeuexFoB1E5G20V +EKxocT Ixsy0uMNXNAIpaI1+pibc4dCOduA8rUYHRqPVeVihFqqN1SjuUly56jMicEmnI5atSWTAP +6Fl3UH 7P+EFVA4tXmhh8zhIImIpS5aKhqSFijshZPYBx+lMSyyoYsrxMoaZriJKh2pUD4JJbDYSu +qrGE8+ GWdtN2xZE3cM+jUpRJKABOIk/9UIp7XAhvHkMGJkW++9n5YarrpApZcReDTlxueFpGbCSJ +ySYHKv t5LEK0YmzFkL5XliNEIjGuLuBl+FEwHInAw1ooEGo5OgwUgakjQ8CcSSTCJJJhKLfG+pHd +a0o4w0 0WSZjHI+DCUjII7ByJMKd8vtJCi/3HAmaLhcr8Te+khxllbpBSSZBNYo250Lo0EvGpKkMb +TLmYwh idBMA8vty9oWuLVtz/XI1gEci8jhldzK1rDZ9ab/4XIaYKcxzMoNh90yxNc2DCyIV0IEn2 +32ETQx hc3hmkkYY6hdtCSMwDxJySmnnMngYoC+8M++Hks1TbGxZqyPjDC3db0mmwx4JpNgUvLnfi +PdssoN 3+two1jedkNH1uWIIalPpgHzwYB3/rnnYGeiu8oQo2Ewy2Jgksad8q0Hg/H9IinbnE+iB2 +/pQ3dP eL2fDw4zxDA30vTMjAqMoesgQTmXf0iaWKmAlwnAfS5lzltZJjxHNpSRzWgmuwGOkDQ88r +AublCq yaeAlYajAW8Sw1jg71bWOeq1DGzXUtvRTCUj67iHUq3pi6TgJYlhqEwMw9De58iGO9257I +e7Y9oP /4V3pxscTGo1iRtstvAfYRXIWndCgwObBrYS4m4YIVTg9ObXPimmLFjAGoawDpSZGLAJPR +PzVvsK 90PPhfCKuFvZ9cTmQEmpbXEFKhb/GpOgR9FMhQs8WtNQJkKX9eKKuvNa015WsmzFaXK5eQ +1mnrOl cBHPjswpWelE17Lpaa+GhNvhJ0tGr2vVKwyIK9CG3IMuntFoWFGsVu6ACDMdajGEi/whCn +f5JHZJ 6kcgypJXWEUmNMYLhVHDndfimLIsttFzLSud01DlNtlVqDyuk1NrFCbADubyd0pjJiMZCb +q0mTJX 1ZzOk1qnKjPCZjr34hoygQW66U1Pd7hjpMyadv9EnzmqR+DDmhFdE4ZEbQE9d8ykyA4Itg +fW04ah lEQv0NAIhZnuVxhyk+Mek5lqDutXpQsDFUv4MOkJUZ+1DBu37HieHIWBTSBBQ3xMRKMASn +BmYdid 4Vam05X5rGUnm8TMTjmxYC5qSzBcQY/SQyMaGbOX1xPZwf6WMsIZsKHB4yaNKnkgr7DHIf +7pkEEZ 1yvEmfJwnZtiLwsnhswFLwzezFUMPOaXvljmRTKEzfqahjtuoQx+gfNnybJXLQFWq2a54Y +JDkMU/ AWUwUWQFqV/X9lcsioxzRntYS/0Hz2wWpFlW8WrW7MMoYSF0fTccago1mdNFico914TI+D +jKJ8f/ 2cdjn8pQYSdxg+AxrHYo2+dKtZaoxGIsQ5lB3ni0ZJtwgahEhsKR+tDAhXNq67pFLFVG+e +UaBqFl I9Rx3Za4sNRX3lGFIsWWwx4pKfPU6jKNCQpbOMoTx+ImTmpDVa/kJYbvDVdtr3whhRDVmo +KooC8V QQtjWQOi/4QrRjQTXq+Cpd13MqlHiTqRX1KkggI5RELYWSWUSqTdRulXt0+aUAZhEz4QR0 +YitCGt ijuUnhi89mcechvEAiojnLnUR4SZyV1UcxbmQs6+WzuPbID2KJkCayi8SqKGFQQT0CQlZ3 +oBkVla R7eJoAFATCxxqcRVYwWNqTPc0U5FjmOA4+injDYwaM5sUqxdY9WJxknUV49Yk6P9PAY2My +FJUEiz Gqrtpja6GrDb5FOrCpWoTDCqCXEW8meCHEUkOWHQpAM1oB3lCFFdtSBIDtCntCgGOQopSk +hYsmqH gAU8QKKQhieiP/4tekyPmYtrjFKfkSzmInoBLZj2wqTYkAc20ApteSy4kY1UhSYHMU1kCB +IQADs= IMAGE64 open my $gifOut, '>', "image.gif" or die "Can't create image file: $!\ +n"; binmode $gifOut; print $gifOut MIME::Base64::decode ($image64); close $gifOut;
    True laziness is hard work
Re: Store image in string
by kejohm (Hermit) on Mar 14, 2011 at 02:21 UTC

    You could store the image data encoded as something like Base64, and then decode it when you print it to file, like this:

    #!perl use strict; use warnings; use MIME::Base64; my $data = < base64-encoded data here >; open my $outfile, '>', 'file.gif' or die $!; binmode $outfile; print {$outfile} decode_base64($data); close $outfile;

    See the MIME::Base64 manpage for information about Base64 encoding, as well as examples of encoding files.

    Update: Oops, sorry Grandfather, you were too quick for me.

    Another Update: Link fixed.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://893016]
Approved by ww
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2024-04-19 05:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found