Scripts

Watermerk bij upload foto

Je ziet bovenaan het script: $path = "images/"; staan. Dit kun je veranderen in een willekeurige map. Deze map (images in dit geval) moet op 777 gezet worden via chmod (of op een andere die veiliger is). Ik ga nu even uit van 777 zodat het sowieso werkt en je het dus goed kunt testen. Weet je niet hoe chmod werkt? Zie de chmod tutorial.. Zie ook het voorbeeld om te bekijken hoe het werkt. Het werkt erg goed en er zitten diverse checks in. Je kunt het aantal max. kb's opgeven, je kunt path opgeven waarin de foto's worden opgeslagen en je mag alleen .jpg of .jpeg uploaden. Dit is de transparante png die ik ervoor gebruikt heb:

watermerk-bij-upload-foto
<?
//--- zet path
$path = "images/"; // met slash en chmod 777! (of lager ivm veiligheid)
//--- zet max. kb's
$maxkb = 40960; // 40960 gedeelt door 1024 is 40 (kb) DUS 1024 keer <aantal kb's> = $maxkb
//--- watermerk path
$path_watermerk = "watermerk.png"; // dit MOET een transparante .png zijn!!!

//--- bekijk of het bestand kleiner of net zo groot als 40 kb is en of de foto wel geupload is en of extentie wel .jpg of .jpeg is!
if ($_POST['submit'] && $_FILES['userfile']['size'] <= $maxkb && !file_exists($path . $_FILES['userfile']['name']) && $_FILES['userfile']['size'] && is_uploaded_file($_FILES['userfile']['tmp_name']) && (strtolower(substr($_FILES['userfile']['name'], -3)) == "jpg" || strtolower(substr($_FILES['userfile']['name'], -4)) == "jpeg"))
{
	//--- upload image naar $path
	move_uploaded_file($_FILES['userfile']['tmp_name'], $path . $_FILES['userfile']['name']);

	//--- transparante watermerk
	$watermerk = imagecreatefrompng($path_watermerk);
	$watermerk_width = imagesx($watermerk);
	$watermerk_height = imagesy($watermerk);
	imagecreatetruecolor($watermerk_width, $watermerk_height);

	//--- orriginele image
	$image = imagecreatefromjpeg($path . $_FILES['userfile']['name']);
	$size = getimagesize($path . $_FILES['userfile']['name']);

	//--- defineer de coordinaten van het watermerk - dit voorbeeld is links onder
	/*
	bijv: geuploade plaatje: 180 x 130
	watermerk groote: 50 x 16

	berekening voor coordinaten 'x' as:
	180 (breedte geuploade foto) - 50 (breedte watermerk) - 5 (ruimte rechts) = 125 pixels vanaf links

	berekening voor 'y' as:
	130 (hoogte geuploade foto) - 16 (hoogte watermerk) - 5 (ruimte onder) = 109 pixels vanaf boven
	*/

	//--- dit is voor rechts boven
	$xas = $size[0] - $watermerk_width - 5;
	$yas = 5;

	//--- overschrijf het 'geuploade bestand' en voeg watermerk toe
	imagecopymerge($image, $watermerk, $xas, $yas, 0, 0, $watermerk_width, $watermerk_height, 100);

	//--- upload image
	imagejpeg($image, $path . $_FILES['userfile']['name']); // max. kwaliteit

	imagedestroy($image);
	imagedestroy($watermerk);

	echo "De foto is geupload. Je kunt de foto bekijken door op de onderstaande link te klikken:<br />";
	echo "<a href=\"" . $path . $_FILES['userfile']['name'] . "\">" . $path . $_FILES['userfile']['name'] . "</a><p>";

	echo "<img src=\"" . $path . $_FILES['userfile']['name'] . "\"><p>";

	echo "<a href=\"" . $_SERVER['PHP_SELF'] . "\">upload nog een foto</a>";
}
else
{
	//--- errors
	if ($_POST['submit'])
	{
		if (file_exists($path . $_FILES['userfile']['name']) && $_FILES['userfile']['name'])
			echo "<b>Error! Bestand bestaat al, hernoem de foto en probeer het opnieuw.</b><p>";
		elseif ($_FILES['userfile']['size'] > $maxkb)
			echo "<b>Error! Bestand is groter dan " . $maxkb . "bytes. Verklein de foto en probeer het opnieuw</b><p>";
		elseif (strtolower(substr($_FILES['userfile']['name'], -3)) != "jpg" && strtolower(substr($_FILES['userfile']['name'], -4)) != "jpeg")
			echo "<b>Error! De foto heeft een verkeerde bestandsnaam. Er mogen alleen foto's geupload worden met als bestandsnaam .jpg of .jpeg.</b><p>";
		else
			echo "<b>Error! De foto is niet goed geupload of er is helemaal geen foto geupload. Probeer het opnieuw.</b><p>";
	}
	else
		echo "Selecteer een foto om te uploaden. In de foto wordt automatisch het logo van PHPhulp verwerkt.<p>";

	//--- formulier met enctype multipart/form-data ivm de file upload
	echo "<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\" enctype=\"multipart/form-data\">";
	echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"" . $maxkb . "\" />";
	echo "Bestand:<br />";
	echo "<input type=\"file\" name=\"userfile\" value=\"" . $_POST['userfile'] . "\" /><br />";
	echo "<input type=\"submit\" name=\"submit\" value=\"uploaden\" />";
	echo "</form>";
}

?>

Reacties

0
Nog geen reacties.