Ik ben zowat nieuw in php, kwam hier een tijdje geleden al met een vraag. Ik stoot nu op een "probleem"...
schets:
in databank worden foto (link naar foto) (veld: foto) en de bijhorende afmetingen geplaatst (veld: width, veld: height).
wat ik wil doen is deze afbeeldingen schalen naar thumbnails op basis van de ingevoerde waardes in de databank. Als height > width dan moet hoogte 120px zijn, indien niet moet breedte 120px zijn...
Ik veronderstel dus dat het in mensentaal iets is als:
if height > width then echo height="120px", else echo width="120px"
Ik slaag er echter niet in om dit in code te doen werken. Can iemand me helpen op basis van deze code?
Je maakt je thumbnails op een verkeerde manier. Thumbs zorgen er voor dat een pagina met veel afbeeldingen sneller laadt door de afbeeldingen te verkleinen. Dit moet niet met HTML gebeuren, want dan wordt nog steeds de hele afbeelding ingeladen. Neem eens een kijkje naar dit script. Daar kan je met een extra $_GET parameter werken om de hoogte of de breedte mee te geven. Dan gaan je pagina's ook sneller laden ;)
Met vriendelijke groeten,
Jens
edit:
Ik gebruik een script dat lang geleden al is gemaakt, maar ongeveer hetzelfde doet:
<?php
error_reporting(E_ALL);
if(isset($_GET['photo']) && !empty($_GET['photo']) && (isset($_GET['sizemax']) || (isset($_GET['maxwidth']) && isset($_GET['maxheight']))))
{
$Dimensions = getimagesize('images/' . $_GET['photo']);
$CurWidth = $Dimensions[0];
$CurHeight = $Dimensions[1];
if(isset($_GET['sizemax']))
{
if($CurWidth > $CurHeight && $CurWidth >= stripslashes($_GET['sizemax']))
{
$Proportion = $CurHeight / $CurWidth;
$NewWidth = stripslashes($_GET['sizemax']);
$NewHeight = $NewWidth * $Proportion;
}
elseif($CurWidth == $CurHeight && $CurWidth >= stripslashes($_GET['sizemax']))
{
$Proportion = $CurHeight / $CurWidth;
$NewWidth = stripslashes($_GET['sizemax']);
$NewHeight = $NewWidth * $Proportion;
}
elseif($CurHeight > $CurWidth && $CurHeight >= stripslashes($_GET['sizemax']))
{
$Proportion = $CurWidth / $CurHeight;
$NewHeight = stripslashes($_GET['sizemax']);
$NewWidth = $NewHeight * $Proportion;
}
else
{
$NewWidth = $Dimensions[0];
$NewHeight = $Dimensions[1];
}
}
elseif(isset($_GET['maxwidth']))
{
if($CurWidth > $CurHeight && $CurWidth >= stripslashes($_GET['maxwidth']))
{
$Proportion = $CurHeight / $CurWidth;
$NewWidth = stripslashes($_GET['maxwidth']);
$NewHeight = $NewWidth * $Proportion;
}
elseif($CurHeight > $CurWidth && $CurHeight >= stripslashes($_GET['maxheight']))
{
$Proportion = $CurWidth / $CurHeight;
$NewHeight = stripslashes($_GET['maxheight']);
$NewWidth = $NewHeight * $Proportion;
}
elseif($CurWidth == $CurHeight && $CurWidth >= stripslashes($_GET['maxwidth']))
{
$Proportion = $CurHeight / $CurWidth;
$NewWidth = stripslashes($_GET['maxwidth']);
$NewHeight = $NewWidth * $Proportion;
}
else
{
$NewWidth = $Dimensions[0];
$NewHeight = $Dimensions[1];
}
}
if(strtolower(substr($_GET['photo'], -3)) == 'png')
{
header('content-type: image/png');
// Het bestand inlezen
$Image = imagecreatefrompng('images/' . $_GET['photo']);
// Nieuwe afbeelding maken
$Destination = imagecreatetruecolor($NewWidth, $NewHeight);
// Huidige afbeelding op de nieuwe afbeelding plaatsen
imagecopyresampled($Destination, $Image, 0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight);
// Afbeelding weergeven
imagepng($Destination);
// Ingelezen bron verwijderen
imagedestroy($Image);
}
elseif(strtolower(substr($_GET['photo'], -3)) == 'jpg')
{
header('content-type: image/jpeg');
// Het bestand inlezen
$Image = imagecreatefromjpeg('images/' . $_GET['photo']);
// Nieuwe afbeelding maken
$Destination = imagecreatetruecolor($NewWidth, $NewHeight);
// Huidige afbeelding op de nieuwe afbeelding plaatsen
imagecopyresampled($Destination, $Image, 0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight);
// Afbeelding weergeven
imagejpeg($Destination);
// Ingelezen bron verwijderen
imagedestroy($Image);
}
elseif(strtolower(substr($_GET['photo'], -4)) == 'jpeg')
{
header('content-type: image/jpeg');
// Het bestand inlezen
$Image = imagecreatefromjpeg('images/' . $_GET['photo']);
// Nieuwe afbeelding maken
$Destination = imagecreatetruecolor($NewWidth, $NewHeight);
// Huidige afbeelding op de nieuwe afbeelding plaatsen
imagecopyresampled($Destination, $Image, 0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight);
// Afbeelding weergeven
imagejpeg($Destination);
// Ingelezen bron verwijderen
imagedestroy($Image);
}
elseif(strtolower(substr($_GET['photo'], -3)) == 'gif')
{
header('content-type: image/gif');
// Het bestand inlezen
$Image = imagecreatefromgif('images/' . $_GET['photo']);
// Nieuwe afbeelding maken
$Destination = imagecreatetruecolor($NewWidth, $NewHeight);
// Huidige afbeelding op de nieuwe afbeelding plaatsen
imagecopyresampled($Destination, $Image, 0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight);
// Afbeelding weergeven
imagegif($Destination);
// Ingelezen bron verwijderen
imagedestroy($Image);
}
// Aangemaakte afbeelding verwijderen
imagedestroy($Destination);
}
?>
@Jens Dit gaat wel werken maar dit is niet echt efficiënt. Als iets in alle if/elseif 's het zelfde is probeer het er dan buiten te halen dat scheelt je zo ontzettend veel regels.
Het punt was dat het over het resizen ging:) Hier is toevallig support voor meerdere image-types toegevoegd. De code kan inderdaad wel wat efficiënter, ja :)
Het is gelukt met het scriptje van vincent... maar het klopt natuurlijk ook dat de foto's dan helemaal moeten inladen terwijl dat dat niet nodig is, en kB's vreet...
het anders script dat ik vind op de link met het thumbs.php filetje krijg ik niet aan de praat...