Bild kleiner darstellen, Proportionen beibehalten

phil-ip

Erfahrenes Mitglied
Hey, ich möchte gerne ein Bild kleiner darstellen lassen. Ähnlich wie bei einem Thumbnail Script. Allerdings spielt es keine Rolle, dass bei meiner Überlegnung das Bild in original Größe geladen werden muss. Meine Überlegung ist es, "height" und "width" jeweils eine "kleiner gleich" Variable zu zuordnen. Eine der beiden Einheiten soll = 100 sein, während die andere kleiner gleich 100 ist. Ich hoffe, ich habe mich verständlich ausgedrückt.

PHP:
<?php
$dir = "files/";
$file = "test.jpg";

$width <= 100;
$height <= 100;

echo "<img src='$dir$file' width='$width' height='$height'>";
?>

Ich bin mir nur noch nicht sicher, wie man das jetzt komplett realisieren könnte. Vermutlich mit "If Then Else"..
Gruß!
 
Also, nehmen wir mal an, du hast zwei Bilder.
Das eine ist 600*600 und das andere 800*600.

Dementsprechend soll aus Bild 1 die Größe 100*100 werden und aus Bild 2 100*75.

PHP:
<?php

$width = '400';
$height = '600';

$div = round( $width / $height , 2);

if(  $div < 1 )
{
	$nHeight = 100;
	$nWidth = $width / ( $height / 100 );
}
elseif( $div == 1 )
{
	$nWidth = 100;
	$nHeight = 100;
}
else
{
	$nWidth = 100;
	$nHeight = $height / ( $width / 100 );
}
echo $nWidth.'<br>';
echo $nHeight;
?>

Ergebnis sollte halt noch gerundet werden.
 
ja das ist der richtige ansatz. allerdings sind $width und $hight nicht von vornerein festgelegt. test.jpg ist nicht durchgehend 400 bzw. 600 groß. Gruß!
 
Danke es hat geklappt!

PHP:
list($width, $height, $type, $attr) = getimagesize("$uploaddir$file");

Problem ist nur, dass Bilder, die kleiner als 100x100 Pixel, automatisch gestreckt werden. Könnte man noch irgendwas machen, damit Bilder > 100 Pixel verkleinert werden und alle anderen die original Größe beibehalten?! Gruß!
 
Einfach prüfen ob das Produkt aus Höhe und Breite größer als 10000 ist. Falls ja wird es verkleinert.
Oder einfach ob Höhe und Breite > 100 ist ;)
 
Ohja da hast du Recht. Müsste das dann nicht so aussehen?
PHP:
if ( $width <= 540 && $height <= 540 )
{ 
    $width = $nWidth;
    $height = $nHeight;
}
else
{
    if(  $div < 1 )
    {
        $nHeight = 540;
        $nWidth = $width / ( $height / 540 );
    }
    elseif( $div == 1 )
    {
        $nWidth = 540;
        $nHeight = 540;
    }
    else
    {
        $nWidth = 540;
        $nHeight = $height / ( $width / 540 );
    }
}

P.S.: Ich habe den Wert auf 540 geändert!

--- EDIT ---

Scheint jetzt zu funktionieren! Fehler lag wohl am fehlenden &&. Vielen Dank!! Du hast mir sehr geholfen!

Allerdings ist es doch nicht so unproblematisch mit der Ladezeit. Gibt es eine Funktion, die aus den neuen Werten ein neues Bild erstellt? Sorry wenn meine Fragen nervig sind.. ich stehe leider noch ganz am Anfang von PHP und nur so kann man lernen.
 
Zuletzt bearbeitet:
Such mal im Internet nach einem Thumbnail Tutorial oder hier im Forum.
Gibt sicher einige Beiträge dazu.

Dafür sind übrigens die Image Funktionen zuständig.
 
Hallo!
Habe hier vor eins zwei Tagen eine kleine Klasse mit lustigen Funktionen gebastelt, die auch eine thumbnail()-Methode beinhaltet.
MfG, Andy
 
Ich möchte jetzt noch eine IF - Else Schleife einbauen, mit der geprüft wird, ob die Datei auch ein Bild ist. Da Text-Dateien ja kein Vorschaubild haben.

PHP:
<?php
$end = ".".$endung;
$imgs = array('.bmp','.dib','.gif','.jpg','.jpeg','.jpe','.tga','.vda','.tif','.tiff','.png','.pxr','.raw','.pcx','.ico');
if ( $end = $imgs )
{
$file = $num.".".$endung;
list($width, $height, $type, $attr) = getimagesize("$uploaddir$file");
$div = round( $width / $height , 2);
    
if ( $width <= 540 && $height <= 540 )    
    { 
    $width = $nWidth;
    $height = $nHeight;
    }
    else    
    {
        if(  $div < 1 )
        {
            $nHeight = 540;
            $nWidth = $width / ( $height / 540 );
        }
        elseif( $div == 1 )
        {
            $nWidth = 540;
            $nHeight = 540;
        }
        else
        {
            $nWidth = 540;
            $nHeight = $height / ( $width / 540 );
        }
    }
echo "<a href='$uploaddir$file' target='_blank'><img src='$uploaddir$file' width='$nWidth' height='$nHeight' border='0'><br></a>";
}
else
{
echo "Dateivorschau nur bei Bildern möglich!";
}
?>

Ich verstehe aber nicht, warum das nicht funktioniert. Bilder werden wie gewohnt dargestellt, nur andere Dateien führen zu einem Fehler.

"Warning: Division by zero in...."

Es hängt mit der Zeile
PHP:
$div = round( $width / $height , 2);
zusammen, aber die wird doch erst "ausgeführt", wenn es sich bei der Datei auch wirklich um ein Bild handelt.

Gruß!
 
Zurück