Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Diginumerot ja kirjaimet

Sivun loppuun

Thasan [07.04.2005 12:14:54]

#

Alkuperäisen koodin on kirjoittanut T.M.

Esimerkki:
http://laatikko.ttkor.ath.cx/php/ok/naytto/naytto.php

Kuva, jota käytin merkkien suunnittelus:
http://laatikko.ttkor.ath.cx/php/ok/naytto/naytto.bmp

edit: linkit päivitetty 21082006

<?php

// Alkuperäinen koodi osoitteessa https://www.ohjelmointiputka.net/koodit_nayta.php?tunnus=1289
// ja sen on kirjoittanut T.M.
//
// kiitos ideasta SysRq868
//
//
// Tämänkin koodin jalosti ttkor
// ttkor@quakenet
//


/*
Lamput jotka sytytetään:

-----0-----
I\    I    /I
I \   8   / I
5 13  I  9  1
I   \ I /   I
I    \I/    I
--6-   -7--
I    /I\    I
I   / I \   I
4 12  I  10 2
I /  11   \ I
I/    I    \I  14
-----3-----   o

*/



// Binäärinä eri numerot:
    $merkki[' '] = bindec('000000000000000');
    $merkki['.'] = bindec('000000000000001');
    $merkki[','] = bindec('000000000000001');
    $merkki['*'] = bindec('000000111111110');
    $merkki['#'] = bindec('110001110000000');
    $merkki['?'] = bindec('110000010001000');
    $merkki['+'] = bindec('000000111001000');
    $merkki['-'] = bindec('000000110000000');
    $merkki['_'] = bindec('000100000000000');
    $merkki['/'] = bindec('000000000100100');
   $merkki['\\'] = bindec('000000000010010');
    $merkki['<'] = bindec('000000000110000');
    $merkki['>'] = bindec('000000000000110');
    $merkki['('] = bindec('000000000110000');
    $merkki[')'] = bindec('000000000000110');
//    $merkki['@'] = bindec('111101010000100'); // pois ku on ruma ku mikä
    $merkki['0'] = bindec('111111000000000');
    $merkki['1'] = bindec('011000000000000');
    $merkki['2'] = bindec('110110110000000');
    $merkki['3'] = bindec('111100110000000');
    $merkki['4'] = bindec('011001110000000');
    $merkki['5'] = bindec('101101110000000');
    $merkki['6'] = bindec('101111110000000');
    $merkki['7'] = bindec('111000000000000');
    $merkki['8'] = bindec('111111110000000');
    $merkki['9'] = bindec('111101110000000');

// Sama kirjaimille
    $merkki['A'] = bindec('111011110000000');
    $merkki['B'] = bindec('001111110000000');
    $merkki['C'] = bindec('100111000000000');
    $merkki['D'] = bindec('011110110000000');
    $merkki['E'] = bindec('100111110000000');
    $merkki['F'] = bindec('100011100000000');
    $merkki['G'] = bindec('101111010000000');
    $merkki['H'] = bindec('011011110000000');
    $merkki['I'] = bindec('000000001001000');
    $merkki['J'] = bindec('011110000000000');
    $merkki['K'] = bindec('000011100110000');
    $merkki['L'] = bindec('000111000000000');
    $merkki['M'] = bindec('011011000100010');
    $merkki['N'] = bindec('011011000010010');
    $merkki['O'] = bindec('111111000000000');
    $merkki['P'] = bindec('110011110000000');
    $merkki['Q'] = bindec('111111000010000');
    $merkki['R'] = bindec('110011110010000');
    $merkki['S'] = bindec('101101110000000');
    $merkki['T'] = bindec('100000001001000');
    $merkki['U'] = bindec('011111000000000');
    $merkki['V'] = bindec('000011000100100');
    $merkki['W'] = bindec('011011000010100');
    $merkki['X'] = bindec('000000000110110');
    $merkki['Y'] = bindec('000000000101010');
    $merkki['Z'] = bindec('100100000100100');
    $merkki['Å'] = bindec('111011110100010');
    $merkki['Ä'] = bindec('111011110100010');
    $merkki['Ö'] = bindec('111111000100010');
    $merkki[''] = bindec('');



// Viivojen paikat
    $line =
    array( // 17x22px
      array( 2,  0,  12,  0),    //0
      array(14,  2,  14,  9),    //1
      array(14, 13,  14, 20),    //2
      array(12, 22,   2, 22),    //3
      array( 0, 20,   0, 13),    //4
      array( 0,  9,   0,  2),    //5
      array( 2, 11,   5, 11),    //6
      array( 9, 11,  12, 11),    //7
      array( 7,  2,   7,  9),    //8
      array(12,  2,   9,  8),    //9
      array(12, 19,   9, 13),    //10
      array( 7, 20,   7, 13),    //11
      array( 2, 19,   5, 13),    //12
      array( 2,  2,   5,  8),    //13
      array(16, 22,  17, 22)    //14
    );





function digi($image, $x, $y, $data, $vari){
    global $merkki, $line;
    $data = (string)$data;
    $k = 19; // Kuinka iso väli numeroille
    for($p = 0; $p < strlen($data); $p++, $x++){
        $binstr = sprintf("%015b", $merkki[$data[$p]]);
        for($u = 0; $u < 15; $u++){
            if($binstr[$u] != "0"){
                imageline(
                  $image,
                  $p*$k + $x+$line[$u][0],
                  $y+$line[$u][1],
                  $p*$k + $x+$line[$u][2],
                  $y+$line[$u][3],
                  $vari
                );
            }
        }
    }
}


header("Content-type: image/png");

$image = imagecreate(600, 200);        // Luodaan kuva
$mus = imagecolorallocate($image, 0, 0, 0);    // Annetaan väri
$vih = imagecolorallocate($image, 0, 255, 0);    // Annetaan toinenkin väri


digi($image, 10, 10, "0123456789", $vih);    // Arvaa, mitä näissä tapahtuu :P
digi($image, 10, 40, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", $vih);
digi($image, 10, 70, "ÅÄÖ*#+-*/?\\<_>()@", $vih);

digi($image, 10, 130, "LÄHETÄ KOMMENTTIA", $vih);
digi($image, 10, 160, "eipäs ole osoite täällä näkyväs koods :P", $vih);


imagepng($image);    // Tulostetaan
imagedestroy($image);    // Poistetaan

// edit: koodia muokattu 9.4.2005
?>

petrinm [07.04.2005 20:05:44]

#

Hieno ei voi kyllä muuta sanoa!!!!

petrinm [07.04.2005 20:05:47]

#

Hieno ei voi kyllä muuta sanoa!!!!

tsuriga [07.04.2005 21:06:34]

#

Ei ole tarpeen esitellä uudestaan $merkki ja $line -taulukoita jokaisella funktiokutsulla, määrittele ne funktion ulkopuolella.

Thasan [09.04.2005 02:13:06]

#

lainaus:

Ei ole tarpeen esitellä uudestaan $merkki ja $line -taulukoita jokaisella funktiokutsulla, määrittele ne funktion ulkopuolella.

Hyvä huomio. Kiitos.

akx [13.04.2005 14:30:18]

#

Ja tuossa on aika reippaasti tuota merkkitaulukkoa...
chunk_split(base64_encode(gzcompress(serialize($merkki),9))); pakkaisi sen 6 riviin, mutta silloin sitä ei voi enää editoida...
Lisäksi tuosta voisi tehdä skaalattavan (vektorifontteja ikäänkuin) muutamalla kerto- ja jakolaskulla.

Thasan [13.04.2005 21:13:51]

#

lainaus:

Ja tuossa on aika reippaasti tuota merkkitaulukkoa...
chunk_split(base64_encode(gzcompress(serialize($merkki),9))); pakkaisi sen 6 riviin, mutta silloin sitä ei voi enää editoida...
Lisäksi tuosta voisi tehdä skaalattavan (vektorifontteja ikäänkuin) muutamalla kerto- ja jakolaskulla.

Niinhän sen vois...
Muista kumminkin että tämä on vaan koodivinkki :D

SysRq868 [14.04.2005 16:45:55]

#

Olen otettu.

T.M. [18.04.2005 02:01:26]

#

Ei mitään gzcompress / base64_encode pakkauksia tarvitse :)

$merkki = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25472, 0, 0, 0, 0, 48, 6, 510, 456, 1, 384, 1, 36, 32256, 12288, 28032, 31104, 13184, 23424, 24448, 28672, 32640, 31616, 0, 0, 48, 0, 6, 24712, 0, 30592, 8064, 19968, 15744, 20352, 18176, 24192, 14208, 72, 15360, 1840, 3584, 13858, 13842, 32256, 26496, 32272, 26512, 23424, 16456, 15872, 1572, 13844, 54, 42, 18468, 0, 18, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30626, 30626, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

//...

function digi($image, $x, $y, $data, $vari){
    global $merkki, $line;
    $data = strtoupper($data);
    $k = 19; // Kuinka iso väli numeroille
    for($p = 0; $p < strlen($data); $p++, $x++){
        $binstr = sprintf("%015b", $merkki[ord($data[$p])]);
//...

Nykyisessä esimerkissäsi on turhaan muunnettu desimaaliluvuiksi ja sitten desimaaliluvut muunnettu takaisin binääriksi.
Esim:tu desimaaliluvuiksi ja sitten desimaaliluvut muunnettu takaisin binääriksi.
Esim:

$merkki['?'] = bindec('110000010001000') // <- bindec turha, koska:
$binstr = sprintf("%015b", $merkki[$data[$p]]); // <- toi muuttaa ne binääriks samalla.

Ja tässä pakattuna tuo yllä oleva taulukkodata:

$data = "eJztklEKA0EIQ69kYnSc+1+sui1lP9q/hVLaDIiixCeM2VeJocU3PdXENAtMFTllp156ZObpZCTI".
"KpY5HTDBUaKL/aRu5KIzZY5EvthxKKmFO4tbbFpZCntnIZZE8yAKq+ewCc2A2SLC2xMD5VG9vKI6".
"NMCg9do9kIvMaM6hQvYxiOrL25ozPBfFBPUO5ZMKdYLlGfevn5H338wjXO5M7qs9P6wbFwLzeA==";
$merkki = array();

$purku = gzuncompress(base64_decode($data));
for($u = 0; $u < strlen($purku); $u+=5){
	$merkki[] = (int)substr($purku, $u, 5);
}

Mitäpä tuosta nyt sitten hyötyy...

Edit: pah, strtoupper() funkkari ei osaa ääkkösiä.

mikaelh [21.04.2005 14:36:21]

#

lainaus:

Edit: pah, strtoupper() funkkari ei osaa ääkkösiä.

Kyllä osaa, kun asettaa localen:

<?php
setlocale(LC_CTYPE, "fi_FI");
echo(strtoupper("äöå")); // ÄÖÅ
?>

T.M. [23.04.2005 02:09:49]

#

Kappas, en tiennytkään että tuo setlocale() funktio toimii myös tällä tavalla (ehkä pitäs lukee manuaalia enemmän).
Tuohon vielä sellainen lisäys, että wintoosassa tuo toimii vain "fin" tai "finnish" määritteellä, jos suomea haluaa ulostaa:

<?php
setlocale(LC_CTYPE, array("fi_FI", "fin", "finnish"));
?>

Tuli taas opittua muutama asia lisää :)

moptim [21.08.2006 18:30:39]

#

ttkor saa kaksi arvausta, että ovatko kuva ja se PHP-tiedosto vielä näkyvinä

Thasan [21.08.2006 21:08:26]

#

lainaus:

ttkor saa kaksi arvausta, että ovatko kuva ja se PHP-tiedosto vielä näkyvinä

arvausta??

mutta asiaan...
Hostname ei ole enää pitkään aikaa ollut käytössä.
Esimerkki on vieläkin saatavilla, mutta eri osoitteessa
http://laatikko.ttkor.ath.cx/php/ok/naytto/naytto.php
http://laatikko.ttkor.ath.cx/php/ok/naytto/naytto.phps
http://laatikko.ttkor.ath.cx/php/ok/naytto/naytto.bmp

Olli [24.11.2006 18:59:18]

#

Multakin demo:
tästä demoon


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta