Jednoduché grafické počítadlo návštěv v PHP
Ačkoli doba největší slávy grafických počitadel návštěvnosti již dávno pominula a současný webdesign spoléhá spíše na počitadla textová (pokud je ze stránek nevynechává zcela), může se vám znalost funkce, vytvářející takového obrázkové počitadlo, občas docela hodit. A právě o tom je tento článek.
Základním předpokladem pro vznik grafického počitadla je existence grafických souborů (samotných číslic), které funkce sloučí do jednoho grafického souboru a ten pak odešle klientovi. Všechny soubory musí mít stejné rozměry (funkce si je sama zjistí), musí být formátu PNG (na jiný typ by se funkce musela trochu upravit) a jejich názvy musí být „0.png“, „1.png“ a tak dále až k „9.png“. Jestliže navíc přidáme do adresáře s číslicemi soubory „LeftSide.png“ a „RightSide.png“, pak je naše funkce přidá na pravou a levou stranu výsledného obrázku, čímž vytvoří rámeček.
Funkci jsem pojmenoval Number2Img, což plně vystihuje její funkci. Na vstupu je adresář s obrázky číslic (bez koncového lomítka) a číslo. Jestliže se obrázky nachází ve stejném adresáři jako naše funkce, parametr $cesta zadávat nemusíme.
function Number2Img ($cislo,$cesta=““){
// když se zadá cesta, přidáme koncové lomítko
$cesta=““ ? $cesta=““ : $cesta.=“/“;
// jména okrajů
$lside=$cesta.“LeftSide.png“; // levý okraj
$rside=$cesta.“RightSide.png“; // pravý okraj
// podle obrázku na kterém je číslice 1 zjistíme šířku a výšku; tento obrázek musí existovat!
list($pic_width, $pic_height, $pic_type, $pic_attr) = getimagesize($cesta.“1.png“); // tato funkce vrací pole: index 0-šířka,1-výška,2-typ (např.: „image/png“) a 3-atribut tagu img (např.:“height=200 width=200″)
$number_width=$pic_width; // šířka jedné číslice
$Image_Height=$pic_height; // výška jedné číslice=výška celého obrázku
// jestliže existuje levý okraj, zjistíme si jeho šířku
if (is_file($lside)){
list($pic_width, $pic_height, $pic_type, $pic_attr) = getimagesize($lside);
$lside_width=$pic_width;
} else {
$lside_width=0;
}
// jestliže existuje pravý okraj, zjistíme si jeho šířku
if (is_file($rside)){
list($pic_width, $pic_height, $pic_type, $pic_attr) = getimagesize($rside);
$rside_width=$pic_width;
} else {
$rside_width=0;
}
// zjistíme si počet číslic v čísle
$Digits_Count = strlen($cislo);
// celková šířka obrázku se vypočte jako součin šířky obrázku a počtu číslic + šířky případných okrajů
$Image_Width = (($Digits_Count * $number_width) + $lside_width + $rside_width);
// vytvoříme prázdný obrázek
$Image = imagecreatetruecolor($Image_Width,$Image_Height);
// Přidáme levý okraj do obrázku, když existuje
if (is_file($lside)){
$image_LeftSide = imagecreatefromPNG($lside);
imagecopy($Image, $image_LeftSide, 0, 0, 0, 0, $lside_width, $Image_Height);
imagedestroy($image_LeftSide);
}
// Přidáme pravý okraj do obrázku, když existuje
if (is_file($rside)){
$image_RightSide = imagecreatefromPNG($rside);
imagecopy($Image, $image_RightSide, ($Image_Width – $rside_width), 0, 0, 0, $rside_width, $Image_Height);
imagedestroy($image_RightSide);
}
// projdeme všechny číslice v řetězci a vložíme je do výsledného obrázku
for($pozice=0; $pozice < $Digits_Count; $pozice++) {
// zjištění právě zpracovávané číslice
$digit = substr($cislo,$pozice,1);
// cesta právě zpracovávané číslice
$digit_name = $cesta. $digit . „.png“;
// zkontrolujeme, zda číslice existuje, když ne, v celkovém obrázku zůstane mezera
if (is_file($digit_name)) {
// výpočet pozice právě zpracovávané číslice
$digit_pozition = (($pozice*$number_width)+$lside_width);
// přečteme právě zpracovávanou číslici
$digit_image = imagecreatefromPNG($digit_name);
// vložíme číslici do celkového obrázku
imagecopy($Image, $digit_image, $digit_pozition, 0, 0, 0, $number_width, $Image_Height);
// odstraníme z paměti obrázek právě zpracované číslice
imagedestroy($digit_image);
}
}
// odešleme hlavičku, která klientovi řekne typ odesílaných dat
header(„Content-Type: image/png“);
// pošleme obrázek klientovy
imagePNG($Image);
// nakonec odstraníme obrázek z paměti, aby jsme ji nezahltili
imagedestroy($Image);
}
Můžete si vyzkoušet funkční ukázku (zdroj), máte-li zájem. Do textboxu zadejte číslo, vyberte styl a stiskněte „OK“. Zobrazí se vám zadané číslo v grafické podobě.
V praxi bychom volali soubor, zpracovávající počitadlo například pomocí <img src="pocitadlo.php">
, přičemž do volaného souboru bychom vložili kód, který by vrátil počet návštěv (například z databáze) a získanou hodnotu použil jako parametr „$cislo“ funkce Number2Img:
<?
// nejprve vložíme samotnou funkci
include („fce,php“);
// kod, který nastaví proměnnou $pristupy
.
.
.
// nakonec funkci zavoláme. Bude odeslán obrázek s číslem.
Number2Img($pristupy)
?>
A úplně na závěr jeden tip. Popisovaná funkce se dá použít i pro převod textu, pokud jí poskytnete příslušné soubory, tedy „A.png“, „B.png“ a další…
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
ZONER Webmail jako první v Česku přináší BIMI s VMC
11. července 2024 -
4 tipy, jak na efektivní úsporu při rozjezdu podnikání
3. ledna 2023 -
Fandíme českým sportovcům a rozdáváme hosting ZDARMA!
26. července 2024 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
gary90
Srp 19, 2009 v 14:36nevím zda to tak má být ale nezdá se mi
přesnějí include („fce,php“); ==> include („fce.php“); ???
Petr Heller
Srp 19, 2009 v 14:59Děkuji za upozornění. V minulé verzi Intervalu.cz byl kód určitě správně, možná došlo k nějaké transforamci při převodu na nový RS.
Díky a s pozdravem
Petr Heller
http://www.inak.cz