Hallo

Ik heb gister de hele dag aan een script liggen te kloten om plaatjes te uploaden en dat ze dan gecopieert en metteen verkleint worden tot thumbnail. Dat werkt gelukkig na heel wat gekloot maar de kwaliteit van de plaatjes laat wat te wensen over. Is er een manier om dit te verbeteren? Want vooral de kleuren worden gewoon vern**kt. mss dat er iets is wat ik fout doe ofzo...

http://members.lycos.nl/kotrsite/index.php?page=gallery

daar staan een paar plaatjes die door men script gegaan zijn.

en voor de gene die intresse hebben in men script:

<?
if (isset($_POST['uploaden']))
{
require("config.php");

function create_image_from($ext,$naam)
{
if ($ext == 'jpg')
$org = imagecreatefromjpeg("fotos/".$naam);
elseif ($ext == 'gif')
$org = imagecreatefromgif("fotos/".$naam);
elseif ($ext == 'png')
$org = imagecreatefrompng("fotos/".$naam);
else
die("ERROR while createing image -> create_image_from");

return $org;
}

function complete_img($ext,$create,$naam)
{
if ($ext == 'jpg')
imagejpeg($create, "fotos/klein_".$naam, 100);
elseif ($ext == 'gif')
imagegif($create, "fotos/klein_".$naam, 100);
elseif ($ext == 'png')
imagepng($create, "fotos/klein_".$naam, 100);
else
die("ERROR while createing image -> complete_img");
}

$img = $foto_name;

if ($img == "")
{
echo "U heeft geen bestand opgegeven.";
exit();
}

$naam = explode("/", $foto_name);
$naam = end($naam);
$naam = strtolower($naam);

$sql = "SELECT * FROM gallery WHERE naam = '".$naam."'";
$res = mysql_query($sql) OR die(mysql_error());
$num = mysql_num_rows($res);

if ($num >= '1')
die ("Sorry de naam van de afbeelding bestaat al. Geef u foto een andere naam en probeer het op nieuw.");

$expl = explode(".", $img);
$ext = end($expl);
$ext = strtolower($ext);

if (!(($ext == 'jpg') || ($ext == 'gif') || ($ext == 'png')))
{
echo "U afbeelding heeft niet de juiste extensie.<br>";
echo "Toegestaan zijn: gif, jpg en png<br>";
exit();
}

copy($foto,"fotos/".$naam);

// functie orginele foto ophalen
$org = create_image_from($ext,$naam);

$size = getimagesize("fotos/".$naam);
$width = $size[0];
$height = $size[1];

if ($size[0] == $size[1])
{
$newwidth = 140;
$newheight = 140;
}
elseif ($size[0] > $size[1])
{
$newwidth = 140;
$newheight = ($size[1] * 140 / $size[0]);
}
elseif ($size[0] < $size[1])
{
$newheight = 140;
$newwidth = ($size[0] * 140 / $size[1]);
}
else
{
echo "ERROR while createing image -> size";
echo "$size[0] x $size[1]";
exit();
}

$create = imagecreate($newwidth, $newheight);
echo "new: $newwidth x $newheight<br>";
echo "orginal: $width x $height<br>";
imagecopyresized($create, $org, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// functie orginele foto ophalen
complete_img($ext,$create,$naam);

imagedestroy($org);
imagedestroy($create);

$imgsize = $foto_size;
$name = $naam;
$size = round($imgsize / 1024);
$datum = date("Y-m-d");
echo "Naam: ".$name."<br>";
echo "Size: ".$size." Kb<br>";
echo "Datum: ".$datum."<br>";
$sql = "INSERT INTO gallery (naam,size,datum,jaar) VALUES ('".$name."', '".$size."', '".$datum."','".$_POST['jaar']."')";
mysql_query($sql) OR die(mysql_error());

?>
<center>
U afbeeling is geupload.<hr><img src="fotos/klein_<? echo "$name";?>">
</center>
<?
}
?>
<center>
BELANGRKIJK: lycos.tripod ondersteunt GEEN gifjes. Als je dit toch probeert zul je een error krijgen.
<form method="post" action="<? echo $PHP_SELF; ?>" enctype="multipart/form-data">
Bestand: <input type="file" name="foto"><br>
<select name="jaar">
<option></option>
<option value="2003">2003</option>
<option value="2004">2004</option>
</select><br>
<input type="submit" name="uploaden" value="Uploaden">
</form>
</center>
Om dit probleem op te lossen, moet je niet ene vaste hoogte en breedte hebben.. je moet het zo maken dat hij kijkt naar de orriginele hoogte en breede en hier dan zoveel procent vanaf haalt.. als je bijvoorbeeld zeker wil weten dat het altijd 200 pixels breed is, dan geef je dat gewoon op. Het is eigenlijk een eenvoudige rekensom:

<?
//--- geef vaste breedte op
$breedte = 200;

//--- bereken het verschil
$verschil = $huidige_breedte - $breedte;

//--- bereken de hoogte
$hoogte = $huidige_hoogte - $verschil;

echo "Breedte: " . $breedte . "<br />";
echo "Hoogte: ". $hoogte . "<br />";
?>
$size = getimagesize("fotos/".$naam); // orginele foto
$width = $size[0];
$height = $size[1];

if ($size[0] == $size[1]) //als het een vierkant is
{
$newwidth = 140;
$newheight = 140;
}
elseif ($size[0] > $size[1]) // als x groter is als y
{
$newwidth = 140;
$newheight = ($size[1] * 140 / $size[0]);
}
elseif ($size[0] < $size[1]) als y groter is als x
{
$newheight = 140;
$newwidth = ($size[0] * 140 / $size[1]);
}

zoiets bedoel je :p. Ik neem toch aan dat met dit script niks fout is? misschien moet ik em wel nog afronden naar een geheel getal..
Weet verder iemand misschien waar dit aan zou kunnen liggen? Anders kan ik maar misschien beter een gallery van internet halen.

Weet iemand overigens een goede? Ik wil wel dat ik em kan downloaden zodat ik zelf nog wat aan kan passen :).
Het probleem zit hem in het imagecreate

vervange dat door imagecreatetruecolor

Mvg Marcel
DANK JE!!!!!!!!!!!!!

echt wat ben ik blij dat t eindelijk werkt zoals het moet ;). Ik vreesde ff dat het maar wat onzin was omdat dreamweaver MX de tag niet kende maar t werkt! Echt hartelijk bedankt ;)

Reageren