|
|
Wikipedia:Skrypt tworzący obrazki do związków chemicznychPoniższy program w języku Perl posłużył do wygenerowania obrazków obecnych w tabelach z opisem związków chemicznych. Program wymaga obecości modułu "Encode" ( powinien być dołączony do dystrybucji perla ) i "Image::Magick" ( może wymagać instalacji pakietu ImageMagick ). Do poprawnego działania skryptu, należy też skopiować do katalogu w którym się on znajduje dwa pliki z czcionką Arial ( arialbd.ttf i arialbi.ttf ), plik z danymi, oraz obrazki znajdujące się w tabelce poniżej.
Program uruchamiamy wydajÄ…c polecenie ./nazwa_programu. Gotowe obrazki zostanÄ… zapisane w podkatalogu obrazki.
#!/usr/bin/perl
use Encode;
use Image::Magick;
local $la;
local $name;
local $short;
local $u;
local $crystal;
local $type;
local $image;
local $mesh;
local $filename;
#f5f5ffg na obrazki
local $dir="obrazki";
#f5f4f3a asocjacyjna typów struktury krystalicznej
local %cstruct=('hex'=>'Heksagonalna.png',
'jed'=>'Jednoskosna.png',
'rpc'=>'Regularna_przestrzennie_centrowana.png',
'rsc'=>'Regularna_sciennie_centrowana.png',
'reg'=>'Regularna.png',
'rom'=>'Rombowa.png',
'tet'=>'Tetragonalna.png',
'tro'=>'Trojskosna.png',
'brk'=>'Brak.png'
);
#f5f4f3a asocjacyna typów związków
local %tstruct=('mal'=>'#009999', #f1f5ff alkaliczny
'mza'=>'#002152', #f1f5ff ziem alkalicznych
'lan'=>'#004000', #f5fff5owiec
'akt'=>'#006633', #f5ffffwiec
'mpz'=>'#003f3f', #f1f5ff przejściowy
'mgg'=>'#333333', #f1f5ff grup głównych
'mtd'=>'#333366', #f1f5ffid
'nie'=>'#5f005f', #fff1f1al
'hal'=>'#000066', #f5fff1n
'szl'=>'#5f0000' #f5ffff szlachetny
);
sub DrawSelection{
local $startx,$starty;
local $points;
#fff1ffślamy lewy górny róg ramki na podstawie l.a.
#fff1ffzy okres
if ($la==1){
$startx=0;
$starty=0;
}#if
elsif($la==2){
$startx=248;
$starty=0;
}#f1fff0
#f2ffff okres
elsif(($la==3)||($la==4)){
$startx=($la-3)*8;
$starty=11;
}#f1fff0
elsif(($la>=5)&&($la<=10)){
$startx=($la-5)*8+208;
$starty=11;
}#f1fff0
#fff1f3 okres
elsif(($la==11)||($la==12)){
$startx=($la-11)*8;
$starty=22;
}#f1fff0
elsif(($la>=13)&&($la<=18)){
$startx=($la-13)*8+208;
$starty=22;
}#f1fff0
#f3f5ffy okres
elsif(($la==19)||($la==20)){
$startx=($la-19)*8;
$starty=33;
}#f1fff0
elsif(($la>=21)&&($la<=36)){
$startx=($la-21)*8+128;
$starty=33;
}#f1fff0
#piÄ…ty okres
elsif(($la==37)||($la==38)){
$startx=($la-37)*8;
$starty=44;
}#f1fff0
elsif(($la>=39)&&($la<=54)){
$startx=($la-39)*8+128;
$starty=44;
}#f1fff0
#szósty okres
elsif(($la>=55)&&($la<=86)){
$startx=($la-55)*8;
$starty=55;
}#f1fff0
#siódmy okres
elsif(($la>=87)&&($la<=118)){
$startx=($la-87)*8;
$starty=66;
}#f1fff0
#ffffffmy ciąg współrzędnych
$points=sprintf("%i,%i %i,%i %i,%i %i,%i %i,%i",$startx,$starty,$startx+8,
$starty,$startx+8,$starty+11,$startx,$starty+11,$startx,
$starty);
$image->Draw(primitive=>'polyline',bordercolor=>'#FFFFFF',points=>$points,
antialias=>'false');
}#f2f5f1lection
mkdir("$dir");
open(FILE,'data.txt');
$line=readline(FILE);
while ($line!=""){
#fffff5y spacje i znak końca linii
$line=~s/\ //g;
$line=~s/\n//g;
#fff2f4wamy dane
($la,$name,$short,$u,$crystal,$type)=split('-',$line);
#ffffffmy nowy obrazek z szablonu
$image=Image::Magick->new;
$image->ReadImage('Szablon-TableImage.png');
#fffff1my ramkÄ™
DrawSelection();
#ffffffjemy nazw
$name=decode("iso-8859-2",$name);
$image->Annotate(font=>'arialbi.ttf',pointsize=>15,fill=>'#FFFFFF',
text=>$name,align=>'Center',x=>163,y=>25);
#f225f1my obrazek z typem struktury krystalicznej
$mesh=Image::Magick->new;
$mesh->ReadImage($cstruct{$crystal});
$image->Composite(image=>$mesh,compose=>'Over',x=>18,y=>(54-$mesh->Get('height')));
undef $mesh;
#f225f1my opis zwiÄ…zku w prostokÄ…cie
$image->Draw(primitive=>'rectangle',bordercolor=>'#FFFFFF',fill=>'#FFFFFF',
points=>'72,4 111,51',antialias=>'false');
$image->Draw(primitive=>'rectangle',bordercolor=>$tstruct{$type},
fill=>$tstruct{$type},points=>'73,5 110,50',
antialias=>'false');
#fff4ff
if (length($short)<=2){
$image->Annotate(font=>'arialbd.ttf',pointsize=>22,fill=>'#FFFFFF',
text=>$short,align=>'Right',x=>106,y=>37);
}#if
else{
$image->Annotate(font=>'arialbd.ttf',pointsize=>18,fill=>'#FFFFFF',
text=>$short,align=>'Right',x=>109,y=>35);
}#f1f1ff
#l.a.
$image->Annotate(font=>'arialbd.ttf',pointsize=>10,fill=>'#FFFFFF',
text=>$la,align=>'Left',x=>76,y=>48);
#f5f5ff atomowa
$image->Annotate(font=>'arialbd.ttf',pointsize=>10,fill=>'#FFFFFF',
text=>$u,align=>'Center',x=>93,y=>16);
#f5ffffjemy nowy obrazek
$filename=sprintf("%s/%s-TableImage.png",$dir,$short);
printf("TworzÄ™ %s\n",$filename);
$image->Write(filename=>$filename);
undef $image;
$line=readline(FILE);
}#fffff1
close(FILE);
|
| kreatyna kreatyna www.activebody.pl | Gry Online Gry Online www.pozycjonarka.in… | Plaza 3 star hotel Los Angeles www.triptake.com | krynica noclegi krynica noclegi,oÅ›rodek, wypoczynk… gornik.com.pl | Kredyty odnawialne Kredyty odnawialne www.eskarbiec.pl |