Jak jsem v minulém díle slíbil, ukážeme si, jak nahrajeme fotku na server už s vloženým vodoznakem. Rozhodně existují jednodušší způsoby jak nahrát soubory na server, třeba přes funkci copy(); move_uploaded_file(); nebo přes script s využitím FTP, ale o tom zase jindy. Nyní se budeme věnovat nahrávání fotky, do které vložíme vodoznak.
Nejdříve si vytvoříme formulář, který nám soubor odešle. Aby odeslal soubor, nesmíme do něj přidat enctype=„multipart/form-data“. Prázdnou hodnotou u parametru action="" scriptu řekeme, že má data odesílat sám sobě. Dále budeme potřebovat zjistit cestu z rootu webu, kterou má každý jinou. Aby nám náš script fungoval, musíme mít ještě vytvořený vodoznak ve formátu PNG, o kterém jsem se již zmiňoval v minulém díle.
Nyní si pojďmě vytvořit soubor, do kterého vložíme tento formulář:
<html>
<head>
<meta http-equiv="content-type" content="text/html;
charset=windows-1250">
<meta name="generator" content="PSPad
editor, www.pspad.com">
<title></title>
</head>
<body>
<form action=""
method="post" enctype="multipart/form-data">
<input type="file"
name="fotka" />
<input type="submit"
name="odesli" value="Nahrát
soubor" />
</form>
</body>
</html>
Před formulář budeme psát script. Nejdřív ověříme, jestli je vůbec formulář odeslaný. V případě že není (takový případ nastane když jdete na stránku poprvé) se nic neprovede. Další podmínkou zajistíme, aby byl nahrávaný soubor typu JPEG.
<?php
/* pokud je formulář
odeslán a obsahuje nahranou fotku */
if(isset($_POST["odesli"]) && isset($_FILES["fotka"]))
{
if($_FILES["fotka"]["type"] == "image/jpeg" ||
$_FILES["fotka"]["type"] == "image/pjpeg")
{
// zpracování
scriptu
}
else
{
echo "Fotka musí
být ve formátu JPEG";
}
}
?>
Fotka ve formuláři se nám nahraje do superglobálního asociativního dvourozměrného pole $_FILES, kde první index je název <input name=„název“> a druhých parametrů je o něco více… Ukážeme si ty nejdůležitější:
<?php
$_FILES["fotka"]["name"]; /* původní název fotky v
počítači */
$_FILES["fotka"]["tmp_name"];
/* název fotky v dočasném
adresáři (v Temporary files) */
$_FILES["fotka"]["type"]; /* typ nahrávaného souboru, u JPG
fotky je to image/jpeg nebo image/pjpeg */
$_FILES["fotka"]["size"]; /* velikost fotky */
?>
To jen pro ukázku. Nyní použijeme script z minulého příkladu s jedinou změnou. Ve funkci imageJpeg(); jako druhý parametr uvedeme proměnnou $root, ve které je uložená cesta z rootu webu a název souboru. Tím uvedeme kam a jak se má soubor uložit.
<?php
/* Průběh scriptu -
vložení vodoznaku a uložení na server */
$size_fotka = getImageSize($fotka); /* zjistí velikost fotky
*/
$size_vdz = getImageSize($vdz); /* zjistí velikost vodoznaku
*/
$new = imageCreateTrueColor($size_fotka[0],$size_fotka[1]); // vytvoří nové černé plátno o
rozměrech fotografie
$image = imageCreateFromJpeg($fotka); /* načte do proměnné fotografii
*/
$copy = imageCreateFromPng($vdz); /* načte do proměnné vodoznak
*/
$dst_x = $size_fotka[0] - $size_vdz[0]; /* vypočítá souřadnice
umístění vodoznaku */
$dst_y = $size_fotka[1] - $size_vdz[1]; /* vypočítá souřadnice
umístění vodoznaku */
imageCopyResized($new, $image, 0,
0, 0,
0, $size_fotka[0], $size_fotka[1], $size_fotka[0], $size_fotka[1]); /* vloží obrázek do plátna;
*/
imageCopyResized($new, $copy,
$dst_x, $dst_y, 0,
0, $size_vdz[0], $size_vdz[1], $size_vdz[0], $size_vdz[1]); /* vloží obrázek do plátna;
*/
$save = imageJpeg($new, $root, 70); /* Uloží obrázek na adresu $root
se 70% kvalitou */
imageDestroy($new); // zruší mezipamět obrázku
imageDestroy($image); // zruší mezipamět
obrázku
imageDestroy($copy); // zruší mezipamět
obrázku
?>
V proměnné $save nyní máme výsledek uložení na server. Tudíž si můžeme vypsat, zda nahrání proběhlo úspěšně, či nikoliv.
if($save) echo
"Fotografie byla úspěšně uložena";
else echo
"Fotografii se nepodařilo nahrát na
server!";
Tento script nám nahraje fotky na server už s vodoznakem, tudíž se nikdo nedostane k originálům bez vodoznaku, oproti předchozímu příkladu, kde fotky byly na serveru uloženy bez něj, a zobrazovaly se přes script. Fotky se nahrávají v originální velisti, což se někdy nemusí hodit, zejména pokud vytváříte fotogalerii a chcete mít všechny fotky ve stejné velikosti. V tomto případě Vám jistě poslouží článek o hromadném zmenšování. V příštím díle bych se chtěl věnovat jak nahrát na server jakýkoliv soubor, a možnostem, které toto nahrávání nabízí. Nakonec ještě uvedu celý script, který jsme dnes vytvořili:
<?php
/* pokud je formulář
odeslán a obsahuje nahranou fotku */
if(isset($_POST["odesli"]) && isset($_FILES["fotka"]))
{
if($_FILES["fotka"]["type"] == "image/jpeg" || $_FILES["fotka"]["type"] == "image/pjpeg")
{
/* Nastavení
scriptu */
/* cesta z rootu
webu - každý má jinou podle svého serveru, ke které připojíme název
fotky */
$root = "/php/htdocs/www/tutorialy/tut4/" . $_FILES["fotka"]["name"];
/* nahraná fotka
do Temporary adresáře */
$fotka = $_FILES["fotka"]["tmp_name"];
/* cesta k
vodoznaku */
$vdz = "./vodoznak.png";
/* Průběh
scriptu - vložení vodoznaku a uložení na server */
$size_fotka = getImageSize($fotka); /* zjistí velikost fotky
*/
$size_vdz = getImageSize($vdz); /* zjistí velikost vodoznaku
*/
$new =
imageCreateTrueColor($size_fotka[0],$size_fotka[1]); // vytvoří nové černé plátno o
rozměrech fotografie
$image =
imageCreateFromJpeg($fotka); /* načte do proměnné fotografii
*/
$copy = imageCreateFromPng($vdz); /* načte do proměnné vodoznak
*/
$dst_x = $size_fotka[0] - $size_vdz[0]; /* vypočítá souřadnice
umístění vodoznaku */
$dst_y = $size_fotka[1] - $size_vdz[1]; /* vypočítá souřadnice
umístění vodoznaku */
imageCopyResized($new, $image, 0,
0, 0,
0, $size_fotka[0], $size_fotka[1], $size_fotka[0], $size_fotka[1]); /* vloží obrázek do plátna;
*/
imageCopyResized($new, $copy,
$dst_x, $dst_y, 0,
0, $size_vdz[0], $size_vdz[1], $size_vdz[0], $size_vdz[1]); /* vloží obrázek do plátna;
*/
$save = imageJpeg($new, $root, 70); /* Uloží obrázek na adresu $root
se 70% kvalitou */
imageDestroy($new); // zruší mezipamět obrázku
imageDestroy($image); // zruší mezipamět
obrázku
imageDestroy($copy); // zruší mezipamět
obrázku
}
else
{
echo "Fotka musí
být ve formátu JPEG";
}
}
if($save) echo "Fotografie
byla úspěšně uložena";
else echo
"Fotografii se nepodařilo nahrát na
server!";
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html;
charset=windows-1250">
<meta name="generator" content="PSPad
editor, www.pspad.com">
<title></title>
</head>
<body>
<form action=""
method="post" enctype="multipart/form-data">
<input type="file"
name="fotka" />
<input type="submit"
name="odesli" value="Nahrát
soubor" />
</form>
</body>
</html>
Hlavní menu
Kategorie
Přihlásit
Anketa
Podporujeme
A možná kdybys jsi zapracoval i na nějakých ukázkách tak by si byl ještě lepší
akorát pořád nechápu jaký ukázky mam dávat