Bildgröße auslesen bzw. ändern

Hi leute,

Ich hab da mal eine Frage: ich bastel grad an einer Internetseite mit php und brauch eure hilfe:

1) Wenn ein bild upgeloaded wird wie kann ich die Bilder auf eine bestimmte bilddatei größe bringe? z.B. ich will das kein Bild über 100kb ist.

2)Wie kann ich auslesen wie groß das bild ist(höhe - breite)? Das brauch ich das um die Bilder später richtig darstellen zu können.

Bei den bilder soll das bildvormat auch jpg, gif,bmp,png...sein können
Danke im vorraus

Jonny

P.S.: ich bin neu hier also... hi
 
Original von Jonny48000
1) Wenn ein bild upgeloaded wird wie kann ich die Bilder auf eine bestimmte bilddatei größe bringe? z.B. ich will das kein Bild über 100kb ist.
Willst du abchecken lassen ob die Datei die abgeloadet wird <= 100kb ist oder willste das Bild kleiner machen lassen.
 
Ersteres kriegst du clientseitig mit dem Parameter MAX_FILE_SIZE im Formular hin. Außerdem gibt's noch eine php.ini-Direktive, die eine Maximalgröße auch auf Server-Seite einstellbar macht. Näheres findest du im PHP-Manual zum Thema Steuerung von Dateiuploads.
 
Hi, ich Post hier jetz mal Mein Script, mit dem ich jedoch noch n kleines Problem hab und noch etwas um eure Hilfe bitte.

PHP:
<?php
    $file = ($_FILES['pic']['tmp_name']);
    $typ = GetImageSize($_FILES['pic']['tmp_name']);
    $error_pic = 0;
    if($typ[2] == "1") {
        ImageCreateFromGIF ($file);
        $file = "ImageCreateFromGIF";
        $new_pic = "ImageGIF";
        $typ = "gif";
    } else if($typ[2] == "2") {
        ImageCreateFromJPEG ($file);
        $file = "ImageCreateFromJPEG";
        $new_pic = "ImageJPEG";
        $typ = "jpg";
    } else if($typ[2] == "3") {
        ImageCreateFromPNG ($file);
        $file = "ImageCreateFromPNG";
        $new_pic = "ImagePNG";
        $typ = "png";
    } else {
        $error_pic = 1;
        echo "     Es werden nur *.GIF, *.JPG und *.PNG Formate unterstüzt.\n";
    }
    if(trim($error_pic) != 1) {
	    if(move_uploaded_file($_FILES['pic']['tmp_name'], "images/".$_POST['dir']."/".$_POST['id'].".".$typ."")) {
            $first = "images/".$_POST['dir']."/".$_POST['id'].".".$typ."";
            $size = getimagesize("$first");
            $width = $size[0];
            $height = $size[1];
            if($width >= $_POST['width']) {
                $width_calc = $width - $_POST['width'];
                $width_new = $width - $width_calc;
                $height_new = $height - $width_calc;
                if($height_new >= $_POST['height']) {
                    $height_calc = $height - $_POST['height'];
                    $height_new = $height - $height_calc;
                    $width_new = $width - $height_calc;
                }
            } else {
                $width_new = $width;
                $height_new = $height;
            }
            if($height >= $_POST['height']) {
                $height_calc = $height - $_POST['height'];
                $height_new = $height - $height_calc;
                $width_new = $width - $height_calc;
                if($width_new >= $_POST['width']) {
                    $width_calc = $width - $_POST['width'];
                    $width_new = $width - $width_calc;
                    $height_new = $height - $width_calc;
                }
            } else {
                $height_new = $height;
                $width_new = $width;
            }
            $old = $file("$first");
            $new = ImageCreateTrueColor($width,$height);
            ImageCopyResized($new,$old,0,0,0,0,$width_new, $height_new,$width,$height);
            $new_pic($new,"$first");
        }
    }
?>

Also erstmal zur Benutzung:
Um ein Bild mit dem Script hochladen zu können, brauch du noch ein Formular, dass erstmal auf das Script verweist und einen Input für "File's" hat mit der id "pic".
Am ende brauchst du für mein Script in dem Formular noch die Felder:
Code:
 echo "       <input type=\"hidden\" name=id value=(Wie das Bild heisen soll.) />\n";
 echo "       <input type=\"hidden\" name=dir value=(Endverzeichnis, in das das Bild kopiert werden soll) />\n";
echo "       <input type=\"hidden\" name=height value=(neue Bildhöhe) />\n";
echo "       <input type=\"hidden\" name=width value=(neue Bildbreite) />\n";
(Das mit dem enctype="multipart/form-data" sollte klar sein... und dass noch ein "Submit Feld kommt")

So, dann die Erläuterung der Funktion des Scripts:
Als erstes, wird in einer Variablen festgelegt, um welche Datei es sich handelt, von der dann später die Kopie erstellt wird, mit der neuen Größe und so. (ein Thumbnail).

Dann werden, in einem Array die Daten des Bildes gespeichert.
(Höhe&Breite (vorrausgesetzt Bild), Typ (JPG, PNG, TXT, etc), Größe (an verbrauchtem Speicherplatz) usw.)

In dem ersten Block mit den If-Abfragen, wird das Format geprüft (1 = GIF, 2 = JPG, 3 = PNG (des is von PHP so festgelegt.)) wenn eines der gewünschten formate übereinstimmt, gehts weiter, anderfalls wird eine fehlermeldung ausgegeben...

in der 2. If-Abfragen, wird überprüft ob bisher alles ok war.
Dann gehts weiter, mit dem Upload des Bilder, das bild ($_FILES['pic']['tmp_name']) wird nun zB in das Verzeichnis "images/Profilbilder/5.jpg"
("images/".$_POST['dir']."/".$_POST['id'].".".$typ.""
images - ist ein festgelegtes verzeichnis, dass hier im script so geschrieben ist und leich geändert werden kann
$_POST['dir'] - ist ein im formular festgelegter pfad, womit man das script mehreren upload-bereichen leichter anpassen kann.
$_POST['id'] - darin kann zB bei einem angemeldeten benutzer die benutzer-id gespeichert werden o.ä.
$typ - wird am anfang mit festgelegt, um den typ zu bestimmen)

Ab hier, wird nun das Neue Bild erstellt.
bzw die Arbeiten dafür laufen an.
der pfad wird festgelegt, wo das bild hinkommen soll.
die daten werden wieder ausgelesen...
die umrechnung wird durchgeführt. womit dass hochgeladene Bild in die neue gewünschte größe convertiert wird.
sollten die größen schon gleich oder kleiner sein, bleibt alles wie es ist.

nun wird das alte Bild, auf die neue Oberfläche "gespannt" und auf dem selben verzeichnis wieder erstellt und somit überschrieben.

----------------------

So und jetz noch zu meim problem...
Iergendwas scheint im bereich "move_ploaded_file" nich zu stimmen.
Wenn ich kleine Bilder hochlade, funktionierts meistens einwandfrei.
Bei großen (so ab 2MB) bekomm ich immer ein Ping-time-out. Ein Freund von mir hats Lokal, an einem PC hochgeladen und am selben pc empfangen, auch Ping-time-out in meinem eigenen Netzwer hab ich des Skript auch getestet funktioniert auch nicht.(Und lokal als auch im LAN sollte es schnellgenug gehn, dass ich keinen Ping-time-out bekomme oder? =/). Also ich glaub, dass es am script liegt. Kann mir das Jemand bestätigen und/oder berichtigen? Ich find einfach nix.

Ist mein erstes Script, hoffe ich hab keinen zu umfangreichen/komplizierten bzw umständlichen Code verwendet. Das Script kann weiter verwendet werden, wer es braucht.
 
Zurück
Oben