Etusivulle
Sivun PHP-lähdekoodin näyttäminen
Alla on sivun satunnaisetliput_kuva.php PHP-lähdekoodi.
<?PHP
$sivusuhteet = array(3 / 2, 4 / 3, 5 / 3, 5 / 4, 7 / 4);
$sivusuhde = $sivusuhteet[rand(0, count($sivusuhteet) - 1)];
$varit = array(
array(0, 0, 0), // musta
array(255, 255, 255), // valkoinen
array(255, 0, 0), // punainen
array(255, 255, 0), // keltainen
array(0, 255, 0), // vihreä
array(0, 0, 255), // sininen
);
shuffle ($varit);
$korkeus = 100;
$leveys = round($sivusuhde * $korkeus);
$kuva = imagecreate($leveys, $korkeus);
// Harmaa tausta
$vari = imagecolorallocate($kuva, 128, 128, 128);
imagefilledrectangle ($kuva, 0, 0, $leveys - 1, $korkeus - 1, $vari);
// Luetaan värit
$kuvanvarit = array();
foreach ($varit as $vari) {
$kuvanvarit[] = imagecolorallocate($kuva, $vari[0], $vari[1], $vari[2]);
}
// Määritellään lipun tyyppivaihtoehdot eli polygonien pisteiden X- ja Y-koordinaatit. Ne on ilmoitettu 1/12-osina eli
// väliltä 0 - 12. 1/12-osia käytetään, koska 12 on pienin luku, joka on jaollinen 3:lla ja 4:llä.
//
// Tyylisääntöjä: 2 - 5 kenttää; ei kahta samanväristä kenttää vierekkäin; ei tyylejä, jotka ovat peilikuvia
// toisistaan; ei tyyppejä, jotka eroavat toisistaan vain mittasuhteilla; jos mahdollista, kentät saman kokoisia.
//
$tyypit = array(
// Tyypit, jotka eivät sisällä vinoja viivoja
array(
// Kaksi vaakaraitaa
array(0, 0, 12, 0, 12, 6, 0, 6),
array(0, 6, 12, 6, 12, 12, 0, 12),
),
array(
// Kolme vaakaraitaa
array(0, 0, 12, 0, 12, 4, 0, 4),
array(0, 4, 12, 4, 12, 8, 0, 8),
array(0, 8, 12, 8, 12, 12, 0, 12),
),
array(
// Kolme vaakaraitaa, ylin ja alin samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 4, 12, 4, 12, 8, 0, 8),
),
array(
// Neljä vaakaraitaa
array(0, 0, 12, 0, 12, 3, 0, 3),
array(0, 3, 12, 3, 12, 6, 0, 6),
array(0, 6, 12, 6, 12, 9, 0, 9),
array(0, 9, 12, 9, 12, 12, 0, 12),
),
array(
// Neljä vaakaraitaa, eka ja neljäs samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 3, 12, 3, 12, 6, 0, 6),
array(0, 6, 12, 6, 12, 9, 0, 9),
),
array(
// Neljä vaakaraitaa, eka ja kolmas samanvärisiä
array(0, 0, 12, 0, 12, 9, 0, 9),
array(0, 3, 12, 3, 12, 6, 0, 6),
array(0, 9, 12, 9, 12, 12, 0, 12),
),
array(
// Kaksi pystyraitaa
array(0, 0, 6, 0, 6, 12, 0, 12),
array(6, 0, 12, 0, 12, 12, 6, 12),
),
array(
// Kolme pystyraitaa
array(0, 0, 4, 0, 4, 12, 0, 12),
array(4, 0, 8, 0, 8, 12, 4, 12),
array(8, 0, 12, 0, 12, 12, 8, 12),
),
array(
// Kolme pystyraitaa, eka ja kolmas samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(4, 0, 8, 0, 8, 12, 4, 12),
),
array(
// Neljä pystyraitaa
array(0, 0, 3, 0, 3, 12, 0, 12),
array(3, 0, 6, 0, 6, 12, 3, 12),
array(6, 0, 9, 0, 9, 12, 6, 12),
array(9, 0, 12, 0, 12, 12, 9, 12),
),
array(
// Neljä pystyraitaa, eka ja kolmas samanvärisiä
array(0, 0, 9, 0, 9, 12, 0, 12),
array(3, 0, 6, 0, 6, 12, 3, 12),
array(9, 0, 12, 0, 12, 12, 9, 12),
),
array(
// Neljä pystyraitaa, eka ja neljäs samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(3, 0, 6, 0, 6, 12, 3, 12),
array(6, 0, 9, 0, 9, 12, 6, 12),
),
array(
// Pystyraita, kaksi vaakaraitaa
array(0, 0, 4, 0, 4, 12, 0, 12),
array(4, 0, 12, 0, 12, 6, 4, 6),
array(4, 6, 12, 6, 12, 12, 4, 12),
),
array(
// Pystyraita, kolme vaakaraitaa
array(0, 0, 3, 0, 3, 12, 0, 12),
array(3, 0, 12, 0, 12, 4, 3, 4),
array(3, 4, 12, 4, 12, 8, 3, 8),
array(3, 8, 12, 8, 12, 12, 3, 12),
),
array(
// Pystyraita, kolme vaakaraitaa, ylin ja alin samanvärisiä
array(0, 0, 3, 0, 3, 12, 0, 12),
array(3, 0, 12, 0, 12, 12, 3, 12),
array(3, 4, 12, 4, 12, 8, 3, 8),
),
array(
// Vasemmalla ylhäällä neliömäinen kenttä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 6, 0, 6, 6, 0, 6),
),
array(
// Keskellä neliömäinen kenttä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(3, 3, 9, 3, 9, 9, 3, 9),
),
array(
// Neljä kenttää 2 * 2 -muodostelmassa
array(0, 0, 6, 0, 6, 6, 0, 6),
array(6, 0, 12, 0, 12, 6, 6, 6),
array(0, 6, 6, 6, 6, 12, 0, 12),
array(6, 6, 12, 6, 12, 12, 6, 12),
),
array(
// Neljä kenttää 2 * 2 -muodostelmassa, vasen ylä ja oikea ala samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(6, 0, 12, 0, 12, 6, 6, 6),
array(0, 6, 6, 6, 6, 12, 0, 12),
),
array(
// Neljä kenttää 2 * 2 -muodostelmassa, vasen ylä ja oikea ala samanvärisiä, vasen ala ja oikea ylä
// samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 6, 0, 6, 6, 12, 6, 12, 12, 6, 12, 6, 6, 0, 6),
),
array(
// Risti
array(0, 0, 5, 0, 5, 5, 0, 5),
array(7, 0, 12, 0, 12, 5, 7, 5),
array(0, 7, 5, 7, 5, 12, 0, 12),
array(7, 7, 12, 7, 12, 12, 7, 12),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
array(
// Risti; vasen ylä ja vasen ala samanvärisiä
array(0, 0, 5, 0, 5, 12, 0, 12),
array(7, 0, 12, 0, 12, 5, 7, 5),
array(7, 7, 12, 7, 12, 12, 7, 12),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
array(
// Risti; vasen ylä ja oikea ylä samanvärisiä
array(0, 0, 12, 0, 12, 5, 0, 5),
array(0, 7, 5, 7, 5, 12, 0, 12),
array(7, 7, 12, 7, 12, 12, 7, 12),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
array(
// Risti; vasen ylä ja oikea ala samanvärisiä
array(0, 0, 6, 0, 6, 6, 12, 6, 12, 12, 6, 12, 6, 6, 0, 6),
array(7, 0, 12, 0, 12, 5, 7, 5),
array(0, 7, 5, 7, 5, 12, 0, 12),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
array(
// Risti; vasen ylä ja oikea ala samanvärisiä; vasen ala ja oikea ylä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 6, 6, 6, 6, 0, 12, 0, 12, 6, 6, 6, 6, 12, 0, 12),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
array(
// Risti; muut neliöt kuin vasen ylä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 5, 0, 5, 5, 0, 5),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
array(
// Risti; kaikki neliöt samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
),
// Tyypit, jotka sisältävät vinoja viivoja
array(
// Kaksi kenttää, viisto raja vasemmasta alakulmasta oikeaan yläkulmaan
array(0, 0, 12, 0, 0, 12),
array(0, 12, 12, 0, 12, 12),
),
array(
// Kolme kenttää, keskimmäinen on suunnikas vasemmasta alakulmasta oikeaan yläkulmaan
array(0, 0, 8, 0, 0, 12),
array(8, 0, 12, 0, 4, 12, 0, 12),
array(4, 12, 12, 0, 12, 12),
),
array(
// Kolme kenttää, keskimmäinen on suunnikas vasemmasta alakulmasta oikeaan yläkulmaan, muut
// kaksi samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(8, 0, 12, 0, 4, 12, 0, 12),
),
array(
// Neljä kenttää, keskimmäiset ovat suunnikkaita vasemmalta alhaalta oikealle ylös
array(0, 0, 6, 0, 0, 12),
array(0, 12, 6, 0, 9, 0, 3, 12),
array(3, 12, 9, 0, 12, 0, 6, 12),
array(6, 12, 12, 0, 12, 12),
),
array(
// Neljä kenttää, keskimmäiset ovat suunnikkaita vasemmalta alhaalta oikealle ylös,
// eka ja kolmas kenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 12, 6, 0, 9, 0, 3, 12),
array(6, 12, 12, 0, 12, 12),
),
array(
// Neljä kenttää, keskimmäiset ovat suunnikkaita vasemmalta alhaalta oikealle ylös,
// eka ja neljäs kenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 12, 6, 0, 9, 0, 3, 12),
array(3, 12, 9, 0, 12, 0, 6, 12),
),
array(
// Kolmio yläreunasta alareunan keskelle
array(0, 0, 12, 0, 6, 12),
array(6, 12, 12, 0, 12, 12),
array(0, 0, 6, 12, 0, 12),
),
array(
// Kolmio yläreunasta alareunan keskelle, kaksi muuta kenttää samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 12, 0, 6, 12),
),
array(
// Kolmio vasemmasta reunasta keskipisteeseen
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 6, 6, 0, 12),
),
array(
// Kolmio vasemmasta reunasta keskipisteeseen, kaksi vaakaraitaa
array(0, 0, 12, 0, 12, 6, 0, 6),
array(0, 6, 12, 6, 12, 12, 0, 12),
array(0, 0, 6, 6, 0, 12),
),
array(
// Kolmio vasemmasta reunasta keskipisteeseen, kolme vaakaraitaa
array(0, 0, 12, 0, 12, 4, 0, 4),
array(0, 4, 12, 4, 12, 8, 0, 8),
array(0, 8, 12, 8, 12, 12, 0, 12),
array(0, 0, 6, 6, 0, 12),
),
array(
// Kolmio vasemmasta reunasta keskipisteeseen; kolme vaakaraitaa, ylin ja alin samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 4, 12, 4, 12, 8, 0, 8),
array(0, 0, 6, 6, 0, 12),
),
array(
// Neljä kenttää, rajat viistosti kulmasta kulmaan
array(0, 0, 12, 0, 6, 6),
array(6, 6, 12, 0, 12, 12),
array(0, 12, 6, 6, 12, 12),
array(0, 0, 6, 6, 0, 12),
),
array(
// Neljä kenttää, rajat viistosti kulmasta kulmaan, ylä ja ala samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(6, 6, 12, 0, 12, 12),
array(0, 0, 6, 6, 0, 12),
),
array(
// Neljä kenttää, rajat viistosti kulmasta kulmaan, vasen ja oikea samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 12, 0, 6, 6),
array(0, 12, 6, 6, 12, 12),
),
array(
// Neljä kenttää, rajat viistosti kulmasta kulmaan, ylä ja ala samanvärisiä, vasen ja oikea samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 12, 0, 6, 6, 12, 12, 0, 12, 6, 6),
),
array(
// V:n muotoinen kuvio
array(0, 1, 6, 12, 0, 12),
array(1, 0, 11, 0, 6, 9),
array(6, 12, 12, 1, 12, 12),
array(0, 0, 1, 0, 6, 9, 11, 0, 12, 0, 12, 1, 6, 12, 0, 1),
),
array(
// V:n muotoinen kuvio; vasen ja oikea kolmiokenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(1, 0, 11, 0, 6, 9),
array(0, 0, 1, 0, 6, 9, 11, 0, 12, 0, 12, 1, 6, 12, 0, 1),
),
array(
// V:n muotoinen kuvio; kaikki kolmiokentät samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 1, 0, 6, 9, 11, 0, 12, 0, 12, 1, 6, 12, 0, 1),
),
array(
// Viisto risti
array(1, 0, 11, 0, 6, 5),
array(7, 6, 12, 1, 12, 11),
array(1, 12, 6, 7, 11, 12),
array(0, 1, 5, 6, 0, 11),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti, vasen ja yläkenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(7, 6, 12, 1, 12, 11),
array(1, 12, 6, 7, 11, 12),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti, vasen ja oikea kenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(1, 0, 11, 0, 6, 5),
array(1, 12, 6, 7, 11, 12),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti, ylä- ja alakenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(7, 6, 12, 1, 12, 11),
array(0, 1, 5, 6, 0, 11),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti; vasen ja oikea kenttä samanvärisiä; ylä- ja alakenttä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 12, 0, 6, 6, 12, 12, 0, 12, 6, 6),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti, muut kolmiokentät kuin vasen samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 1, 5, 6, 0, 11),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti, muut kolmiokentät kuin ylä samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(1, 0, 11, 0, 6, 5),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Viisto risti, kaikki kolmiokentät samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11,
5, 6, 0, 1),
),
array(
// Vino nelikulmio
array(0, 0, 6, 0, 0, 6),
array(6, 0, 12, 0, 12, 6),
array(0, 6, 6, 12, 0, 12),
array(6, 12, 12, 6, 12, 12),
array(6, 0, 12, 6, 6, 12, 0, 6),
),
array(
// Vino nelikulmio; vasen ylä- ja vasen ala -kolmio samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(6, 0, 12, 0, 12, 6),
array(6, 12, 12, 6, 12, 12),
array(6, 0, 12, 6, 6, 12, 0, 6),
),
array(
// Vino nelikulmio; vasen ylä- ja oikea ylä -kolmio samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 6, 6, 12, 0, 12),
array(6, 12, 12, 6, 12, 12),
array(6, 0, 12, 6, 6, 12, 0, 6),
),
array(
// Vino nelikulmio; vasen ylä- ja oikea ala -kolmio samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(6, 0, 12, 0, 12, 6),
array(0, 6, 6, 12, 0, 12),
array(6, 0, 12, 6, 6, 12, 0, 6),
),
array(
// Vino nelikulmio; vasen ylä- ja oikea ala -kolmio samanvärisiä; vasen ala- ja oikea ylä -kolmio
// samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(0, 6, 6, 6, 6, 0, 12, 0, 12, 6, 6, 6, 6, 12, 0, 12),
array(6, 0, 12, 6, 6, 12, 0, 6),
),
array(
// Vino nelikulmio; kaikki kolmiokentät samanvärisiä
array(0, 0, 12, 0, 12, 12, 0, 12),
array(6, 0, 12, 6, 6, 12, 0, 6),
),
);
$polygonit = $tyypit[rand(0, count($tyypit) - 1)];
// Peilataanko lippu vaaka- tai pystysuunnassa
$peilataankovaaka = false;
$peilataankopysty = false;
if (rand(0, 1) == 1) $peilataankovaaka = true;
if (rand(0, 1) == 1) $peilataankopysty = true;
// Piirretään polygonit
foreach ($polygonit as $avain => $polygoni) {
$polygoni = MuunnaKoordinaatisto($polygoni, $leveys, $korkeus, $peilataankovaaka, $peilataankopysty);
imagefilledpolygon ($kuva, $polygoni, count($polygoni) / 2, $kuvanvarit[$avain]);
}
header ("Content-type: image/png");
imagepng ($kuva);
imagedestroy ($kuva);
function MuunnaKoordinaatisto($sisaan, $leveys, $korkeus, $peilataankovaaka, $peilataankopysty) {
// Muuntaa polygonin koordinaatiston.
// Sisään: taulukko, jossa koordinaatit kuvan leveyden ja korkeuden 1/12-osina; kuvan leveys ja korkeus;
// peilataanko kuva vaaka- ja pystysuunnassa.
// Ulos: taulukko, jossa koordinaatit pikseleinä.
$ulos = array();
foreach ($sisaan as $avain => $koordinaatti) {
$temp = $koordinaatti;
if ($avain % 2 == 0) {
// Vaakakoordinaatti
if ($peilataankovaaka) $temp = 12 - $temp;
$temp = round($temp / 12 * ($leveys - 1));
} else {
// Pystykoordinaatti
if ($peilataankopysty) $temp = 12 - $temp;
$temp = round($temp / 12 * ($korkeus - 1));
}
$ulos[] = $temp;
}
return $ulos;
}
?>
Takaisin sivulle satunnaisetliput_kuva.php
Etusivulle