Two ways to embed graphics in HTML source

The GIMP .colorhtml file save filter (examples)

#!/usr/bin/perl#pcg@goof.comuseGimp;useGimp::Fu;useGimp::UI;useFcntl;my%replace=("&"=>"&amp;","<"=>"&lt;",">"=>"&gt;",);
#readsomefile,maketextoutofitsubread_text{my$fh=shift;local$/;my$data=<$fh>;$data;}register"file_colorhtml_save","Savest
heimageascolouredhtmltext","=pod","MarcLehmann","MarcLehmann<pcg\@goof.com>","1999-11-22","<Save>/COLORHTML","*",[[PF_RA
DIO,"character_source","wheretotakethecharactersfrom",0,[sourcecode=>0,textfile=>1,filename=>2]],[PF_FILE,"characters","
thefilenametoreadorthecharacterstouse",""],[PF_STRING,"font_size","thehtmlfontsize(1..7or-7..+7)",2],[PF_BOOL,"compatibl
e","html-4.0compliancy?",1],[PF_BOOL,"closetag","addclosingtag?",1],],sub{my($img,$drawable,$filename,$filename2,$source
,$text,$size,$html40,$closetag)=@_;my($new_img,$new_drawable);my$max;my$export=Gimp::UI::export_image($new_img=$img,$new
_drawable=$drawable,"COLORHTML",CAN_HANDLE_RGB);die__"exportfailed"if$export==EXPORT_CANCEL;my($w,$h)=($new_drawable->wi
dth,$new_drawable->height);Gimp->tile_cache_ntiles($w/Gimp->tile_width+1);sysopenFILE,$filename,O_CREAT|O_TRUNC|O_WRONLY
ordie__"Unabletoopen'$filename'forwriting:$!\n";my$data;if($source==0){seekDATA,0,0;$data=read_text*DATA;}elsif($source=
=1){local*FILE;openFILE,"<$text"ordie"$text:$!\n";$data=read_text*FILE;}elsif($source==2){$data=$text;}my@data;$data=~y/
\x21-\x7f//cd;@data=split//,$data;for(@data){s/([&<>])/$replace{$1}/e;}@data=("X")x80unless@data;my@chars;my$region=$new
_drawable->pixel_rgn(0,0,$w,$h,0,0);initProgress__"Saving'$filename'asCOLORHTML...";$closetag=$closetag?"</font>":"";pri
ntFILE"<html><bodybgcolor=black>\n<fontsize=\"$size\"><pre>\n";for(my$y=0;$y<$h;$y++){my$pel=$region->get_row2(0,$y,$w);
push@chars,@datawhile@chars<$w;if($html40){$pel=~s{(...)}{"<fontcolor=\"#".unpack("H*",$1)."\">".shift(@chars).$closetag
;}ges;}else{$pel=~s{(...)}{"<fontcolor=".unpack("H*",$1).">".shift(@chars).$closetag;}ges;}printFILE$pel,"\n";updateProg
ress$y/$h;}printFILE"</pre>\n</html>\n";$new_img->deleteif$export==EXPORT_EXPORT;();};Gimp::on_query{Gimp->register_save
_handler("file_colorhtml_save","colorhtml","");};exitmain;=head1COLORHTMLFILEFORMATThisfilesavefilterwritesalargeregular
gridfilledwithcolouredcharacters.Thecharacterscanbestoredinfileanddon'thaveanythingtodowiththeimage.Thecolourofeachchara
cter,though,istakenfromtheimagetosave.Thiscreatessomekindofmosaiceffectwithcharacters.Thepicturesshouldbelimitedtoabout1
20x120pixels,sincemostbrowsersdonotviewlargerimages.Theaspectratiodependsonthefixed-widthfontthebrowserisusing,andisusua
llyaround10:6(soyoushouldsquashyourimageaccordingly).TheFONTtagscanbesavedeitherHTML-4.0compliant(C<fontcolor="#rrggbb">
)orinaproprietaryformatmostbrowserssupport(C<fontcolor=rrggbb>).Tosaveevenmorespaceyoucanleaveouttheclosingtag(C</font>)
,butthiswillpotentiallyleavethousandsoffontelementsopeninthebrowser,andwilldisturbthecurrentfontcolour.=cut__END__#!/usr
/bin/perl#pcg@goof.comuseGimp;useGimp::Fu;useGimp::UI;useFcntl;my%replace=("&"=>"&amp;","<"=>"&lt;",">"=>"&gt;",);#reads
omefile,maketextoutofitsubread_text{my$fh=shift;local$/;my$data=<$fh>;$data;}register"file_colorhtml_save","Savestheimag
eascolouredhtmltext","=pod","MarcLehmann","MarcLehmann<pcg\@goof.com>","1999-11-22","<Save>/COLORHTML","*",[[PF_RADIO,"c
haracter_source","wheretotakethecharactersfrom",0,[sourcecode=>0,textfile=>1,filename=>2]],[PF_FILE,"characters","thefil
enametoreadorthecharacterstouse",""],[PF_STRING,"font_size","thehtmlfontsize(1..7or-7..+7)",2],[PF_BOOL,"compatible","ht
ml-4.0compliancy?",1],[PF_BOOL,"closetag","addclosingtag?",1],],sub{my($img,$drawable,$filename,$filename2,$source,$text
,$size,$html40,$closetag)=@_;my($new_img,$new_drawable);my$max;my$export=Gimp::UI::export_image($new_img=$img,$new_drawa
ble=$drawable,"COLORHTML",CAN_HANDLE_RGB);die__"exportfailed"if$export==EXPORT_CANCEL;my($w,$h)=($new_drawable->width,$n
ew_drawable->height);Gimp->tile_cache_ntiles($w/Gimp->tile_width+1);sysopenFILE,$filename,O_CREAT|O_TRUNC|O_WRONLYordie_
_"Unabletoopen'$filename'forwriting:$!\n";my$data;if($source==0){seekDATA,0,0;$data=read_text*DATA;}elsif($source==1){lo
cal*FILE;openFILE,"<$text"ordie"$text:$!\n";$data=read_text*FILE;}elsif($source==2){$data=$text;}my@data;$data=~y/\x21-\
x7f//cd;@data=split//,$data;for(@data){s/([&<>])/$replace{$1}/e;}@data=("X")x80unless@data;my@chars;my$region=$new_drawa
ble->pixel_rgn(0,0,$w,$h,0,0);initProgress__"Saving'$filename'asCOLORHTML...";$closetag=$closetag?"</font>":"";printFILE
"<html><bodybgcolor=black>\n<fontsize=\"$size\"><pre>\n";for(my$y=0;$y<$h;$y++){my$pel=$region->get_row2(0,$y,$w);push@c
hars,@datawhile@chars<$w;if($html40){$pel=~s{(...)}{"<fontcolor=\"#".unpack("H*",$1)."\">".shift(@chars).$closetag;}ges;
}else{$pel=~s{(...)}{"<fontcolor=".unpack("H*",$1).">".shift(@chars).$closetag;}ges;}printFILE$pel,"\n";updateProgress$y
/$h;}printFILE"</pre>\n</html>\n";$new_img->deleteif$export==EXPORT_EXPORT;();};Gimp::on_query{Gimp->register_save_handl

The GIMP .dataurl file save filter (examples)