Autor Zpráva
Tomashekk
Profil
Hlasí mi to chybu:
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in /localhost/...... on line 16
kód
<?php

if($_FILES['userfile'] != ""){
echo "aa";
	$imageinfo = getimagesize($_FILES["userfile"]["tmp_name"]);
if (!getimagesize($_FILES['userfile']['tmp_name']))
{ echo "Invalid Image File...";
exit();
}
	if($imageinfo['mime'] != 'image/png' && $imageinfo['mime'] != 'image/jpeg'  && $imageinfo['mime'] != 'image/jpg') {
	    echo "Špatný typ obrázku";
exit();
	}
	if($imageinfo[0] > 800 || $imageinfo[1] > 800){
	echo "Rozlišení obrázku je moc velké!";
	exit();
	}
	if($_FILES["userfile"]["size"] > 1000000 ){
	$velikost_obrazku = $_FILES["userfile"]["size"] / 1000000;
	echo "Velikost obrázku je velká! Jeho velikost je".$velikost_obrazku."MB a max je 1MB";
	exit();	

	}

	
	$uploaddir = 'uploads/';
	$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
	if (file_exists("uploads/" . $_FILES["userfile"]["name"]))
	      {
	      echo $_FILES["userfile"]["name"] . " already exists. ";
	      }
	    else
		if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
		  echo "Nahrání obrázku bylo úspěšné.\n";
		}
		else {
		  echo "Nahrávání obrázku selhalo.\n";
		}
	}

?>

Nějak nemohu docílit kde je chyba
xmark
Profil
Tomashekk:
Nejsem si jist, ale zkusil bych
<form action="#" method="post" enctype="mutipart/form-data">
Tomashekk
Profil
xmark:
stále nic.. furt to samé :(
Tomashekk
Profil
V příspěvku #1 je upraven kod, jak mi to funguje. Co teď ale potřebuji. Okomentovat zda to takhle je dobré (chci povolit jen PNG a JPG). A také poradit jak by se dalo uložit ten obrázek s jinýma rozměrama. Uživatel tam dá obrázek o rozměrech 1024x600 a já bych ho chtěl změnit aby to bylo 800x.... (ovšem nezdeformovaný). Jak by se to udělalo?
KGW
Profil
jpe v mime dej pryč a dej místo něj pjpeg a na zmenšení bude něco jako imagecopyresampled
Tomashekk
Profil
KGW:
jakej je rozdíl mezi jpeg a pjpeg?
holi
Profil
Toto je kod pro zmenšení obrázku, je to vytažené z mého zdrojáku takže cesty k souboru atd je potřeba změni. Funkce je jednoduchá, upne se obrázek, vytvoří se jeho kopije s rozlíšením 198x150 tzn. "thumb" a potom se udělá to samé akorát se zjištuje jestli je obrázek menší jak 1024x768 pokud ne zmenší se na tuto velikost, výsledek => obrázek ve full rozlíšení, další obrázek v rozlíšení 1024x768, a pak zmenšenína nebo taky náhled v 198x150.
BTW. doporučuji jedno to zmenšování smazat např náhled protože pokud máte nějaký placený hosting a ne svůj tak defaultních 16Mb RAMek což normálně bývá vám u obrázků třeba 2Mb nebude stačit.
<?
if($sel == "projekty"){
$cesta = "../galerie/projekty/full";
$cesta2 = "../galerie/projekty/thumb";
$cesta3 = "../galerie/projekty/large";
}
//KONTROLA FORMÁTU
$kontrola = Array ('png', 'jpg', 'jpeg');

$path = PathInfo($_FILES['File']['name']);

if (!In_Array(StrToLower($path['extension']), $kontrola))
{
  echo "Vkládaný soubor není obrázek!";
  exit;
}
//UPLOAD OBRÁZKU 
$Name = $_FILES['File']['name'];
Move_Uploaded_File($_FILES['File']['tmp_name'], "$cesta/$Name");
//ZJIŠTĚNÍ ROZLÍŠENÍ UPLOADOVANÉHO OBRÁZKU
$Image = getImageSize("$cesta/$Name");
//ROZLÍŠENÍ  NÁHLEDU
$NewWidth = "198";
$NewHeight = "150";
//VYTVOŘENÍ NOVÉHO OBRÁZKU PRO NÁHLED
$thumb = ImageCreateTrueColor ($NewWidth, $NewHeight);

// NAČTENÍ PŮVODNÍHO OBRÁZKU
$jpeg = Array('jpg','jpeg');
$png = Array('png');
$format = pathinfo("$cesta/$Name");
if(In_array(StrToLower($format['extension']), $jpeg)){
$source = ImageCreateFromJpeg("$cesta/$Name");
}
if(In_array(StrToLower($format['extension']), $png)){
$source = ImageCreateFromPng("$cesta/$Name");
}
// ZMENŠENÍ
ImageCopyResized($thumb, $source,0,0,0,0,$NewWidth,$NewHeight,$Image[0],$Image[1]);

// ULOŽENÍ OBRÁZKU NA DISK
if($koncovka == "jpg" || "jpeg"){
ImageJpeg ($thumb, "$cesta2/$Name", 100);
}
if($koncovka == "png"){
ImagePng ($thumb, "$cesta2/$Name", 100);
}
// UVOLNĚNÍ PAMĚTI
ImageDestroy($thumb);
ImageDestroy($source);

//ROZLÍŠENÍ  NÁHLEDU
if($Image[0]<1024){
$NewWidth2 = $Image[0];
$NewWidth2 = $Image[0];
}
else{
$NewWidth2 = "1024";
$NewHeight2 = "768";
}
//VYTVOŘENÍ NOVÉHO OBRÁZKU PRO ZOBRAZENÍ
$large = ImageCreateTrueColor ($NewWidth2, $NewHeight2);

// NAČTENÍ PŮVODNÍHO OBRÁZKU
if($koncovka == "jpg" || "jpeg"){
$source = ImageCreateFromJpeg("$cesta3/$Name");
}
if($koncovka == "png"){
$source = ImageCreateFromPng("$cesta3/$Name");
}

// ZMENŠENÍ
ImageCopyResized($large, $source,0,0,0,0,$NewWidth2,$NewHeight2,$Image[0],$Image[1]);

// ULOŽENÍ OBRÁZKU NA DISK
// NÁZEV OBRÁZKU BUDE ZAČÍNAT PREFIXEM thumb-
if($koncovka == "png"){
ImagePng ($large, "$cesta3/$Name", 100);
}
if($koncovka == "jpg" || "jpeg"){
ImageJpeg ($large, "$cesta3/$Name", 100);
}
// UVOLNĚNÍ PAMĚTI
ImageDestroy($large);
ImageDestroy($source);
//VYPÍŠE ZPRÁVU A ODKAZ NA PŘEDCHOZÍ STRÁNKU
echo "<center>Obrázek ".$Name." byl nahrán.<br><a href=\"gallery.php\">Zpět na předešlou stránku</a>";

?>

Edit: Zapoměl sem to dát do <??>
xmark
Profil
holi:
A co když budu nahrávat obrázek Eiffelovky, tzn. nastojato? Připadá ti rozměr 198x150 fajn?
KGW
Profil
pjpeg = progressive jpeg
holi
Profil
bože pokud chcete mít pěkně uspořádanou galerii musíte mít nějakou oběť, ale pokud to Tomashekkovi bude vadit co mu bráni si to nadefinovat měřítko zmenšení např
<?php $meritko =  0.3;?>
potom by kod pro určení nové velikosti vypadal asi takto...
<?php
$NewWidth2 = $Image[0]*$meritko;
$NewHeight2 = $Image[1]*$meritko;
?>


Výsledek by byl o 70% menší :))
Tomashekk
Profil
KGW:
ale jakej je v tom rozdíl?
Tomashekk
Profil
xmark:
jako já mám už zobrazování galerie hotové, jde mi už jen o upload
jen kdyby to přesáhlo prostě těch 800 na výšku nebo šířku, tak aby to zmenšilo za uživatele (aby to bylo i pro blba).
holi:
z tvých kódů si něco převezmu, děkuji moc
holi
Profil
pokud budeš používat obě zmenšení tak si u zmenšování large dej bacha, udělal jsem tam chybu u podmínky kdy se vybírá proměnná $source jo musíš přepsat na $source2 nebo jiný název protože je už použita u prvního zmenšování.
Tomashekk
Profil
holi:
bude stačit v podstatě jen toto
// NAČTENÍ PŮVODNÍHO OBRÁZKU
$jpeg = Array('jpg','jpeg');
$png = Array('png');
$format = pathinfo("$cesta/$Name");
if(In_array(StrToLower($format['extension']), $jpeg)){
$source = ImageCreateFromJpeg("$cesta/$Name");
}
if(In_array(StrToLower($format['extension']), $png)){
$source = ImageCreateFromPng("$cesta/$Name");
}
// ZMENŠENÍ
ImageCopyResized($thumb, $source,0,0,0,0,$NewWidth,$NewHeight,$Image[0],$Image[1]);

// ULOŽENÍ OBRÁZKU NA DISK
if($koncovka == "jpg" || "jpeg"){
ImageJpeg ($thumb, "$cesta2/$Name", 100);
}
if($koncovka == "png"){
ImagePng ($thumb, "$cesta2/$Name", 100);
}
// UVOLNĚNÍ PAMĚTI
ImageDestroy($thumb);
ImageDestroy($source);

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: