css/wet-floor-effect.html | javascript/wet-floor-effect.html | php/wet-floor-effect | php/natte-vloer-effect | imagick/natte-vloer-effect

Als deze procedure op een server-configuratie moet werken zonder de volledige GD2 library (beschikbaar), moet je de alternatieve procedure gebruiken (die geen gebruik maakt van imagelayereffect()...). Klik op deze link.
Maak een file aan met de naam wet-floor.php en plaats het onderstaande php script daarin. Om een afbeelding van het natte vloer effect te voorzien, moet je het script aanroepen in een img-tag. Hier een voorbeeld van de html-code.
<img src="wet-floor.jpg" width="225" height="200" alt="wet floor afbeelding"><br />
<img src="wet-floor.php?img=wet-floor.jpg&hoogte=60px" alt="spiegel van afbeelding">
De hoogte kan je in px of % aangeven. Geef je geen hoogte aan, dan zal het script een default waarde van 50% (van de hoogte van de afbeelding) gebruiken.
<?php
if (isset($_GET['img']))
{
$bron_plaatje = $_GET['img'];
}
else
{
echo 'je hebt geen plaatje in de opdrachtregel geplaatst';
exit();
}
$rood = 127;
$groen = 127;
$blauw = 127;
if (isset($_GET['hoogte']))
{
$hoogte_output = $_GET['hoogte'];
if (substr($hoogte_output, -1) == '%')
{
$hoogte_output = (int) substr($hoogte_output, 0, -1);
if ($hoogte_output == 100)
{
$hoogte_output = "0.99";
}
elseif ($hoogte_output < 10)
{
$hoogte_output = "0.0$hoogte_output";
}
else
{
$hoogte_output = "0.$hoogte_output";
}
}
else
{
$hoogte_output = (int) $hoogte_output;
}
}
else
{
$hoogte_output = 0.50;
}
$alpha_start = 80;
$alpha_end = 0;
$details_plaatje = getimagesize($bron_plaatje);
if ($details_plaatje === false)
{
echo 'het plaatje is niet goed';
exit();
}
else
{
$breedte = $details_plaatje[0];
$hoogte = $details_plaatje[1];
$type = $details_plaatje[2];
}
if ($hoogte_output < 1)
{
$nieuwe_hoogte = $hoogte * $hoogte_output;
}
else
{
$nieuwe_hoogte = $hoogte_output;
}
switch ($type)
{
case 1:
$bron_img = imagecreatefromgif($bron_plaatje);
break;
case 2:
$bron_img = imagecreatefromjpeg($bron_plaatje);
break;
case 3:
$bron_img = imagecreatefrompng($bron_plaatje);
break;
default:
echo 'ik ken het format van het plaatje niet';
exit();
}
$output = imagecreatetruecolor($breedte, $nieuwe_hoogte);
$buffer = imagecreatetruecolor($breedte, $nieuwe_hoogte);
imagesavealpha($bron_img, true);
imagesavealpha($output, true);
imagealphablending($output, false);
imagesavealpha($buffer, true);
imagealphablending($buffer, false);
imagecopy($output, $bron_img, 0, 0, 0, $hoogte - $nieuwe_hoogte, $breedte, $nieuwe_hoogte);
for ($y = 0; $y < $nieuwe_hoogte; $y++)
{
imagecopy($buffer, $output, 0, $y, 0, $nieuwe_hoogte - $y - 1, $breedte, 1);
}
$output = $buffer;
$alpha_length = abs($alpha_start - $alpha_end);
imagelayereffect($output, IMG_EFFECT_OVERLAY);
for ($y = 0; $y <= $nieuwe_hoogte; $y++)
{
$pct = $y / $nieuwe_hoogte;
if ($alpha_start > $alpha_end)
{
$alpha = (int) ($alpha_start - ($pct * $alpha_length));
}
else
{
$alpha = (int) ($alpha_start + ($pct * $alpha_length));
}
$final_alpha = 127 - $alpha;
imagefilledrectangle($output, 0, $y, $breedte, $y, imagecolorallocatealpha($output, $rood, $groen, $blauw, $final_alpha));
}
if (headers_sent())
{
echo 'ik kan de wet floor afbeelding (spiegeling) niet weergeven';
exit();
}
else
{
header("Content-type: image/png");
imagepng($output);
imagedestroy($output);
exit();
}
?>