PHP Image resize
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bild
code
datei
entfernen
erwarten
erzeugen
fehler
fehlermeldung
funktion
galerie
http
jemand
posten
ratio
tip
umgewandelte datei
url
variable code
warnung
zeile
-
Hallo
Wie kann ich auf Lima-City ein Bild mit PHP resizen? Beispiele die ich gefunden habe, benutzen GD Library. Wird hier eine Alternative unterstützt? Oder gibt es sogar Code, der ohne zusätzliche Library funktioniert? Diese selbst installieren kann ich nicht, oder?
Falls GD sogar schon auf Lima unterstützt wird, funktioniert mein Code nicht. Ich würde gerne ein Bild zuerst auf eine bestimmte Breite resizen und dann uploaden.
Gruss
Beitrag zuletzt geändert: 11.1.2017 18:03:06 von simter -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich hatte mal was ähnliches gebaut, das Bild wurde dabei verkleinert, genauer gesagt auf die feste Höhe von 50.
$guid wurde dabei nur verwendet, um einen eindeutigen Dateinamen zu erzeugen.
Wenn du alles selber bauen willst, ist hier der Link zu der funktion, die du hauptsächlich haben willst *klick*
ansonsten ist hier der Teil von damals (~3 Jahre alt, obes noch geht weiß ich nicht)
$original_img_path = '/Galerie/original/'; $mini_img_path = '/Galerie/img_mini/'; $error = ""; for($i=0; $i<count($_FILES["img_file"]["name"]);$i++){ if ($_FILES["img_file"]["type"][$i] == "image/jpeg" or $_FILES["img_file"]["type"][$i] == "image/png" or $_FILES["img_file"]["type"][$i] == "image/gif") { $guid = getGUID(); $new_org_file = $_SERVER['DOCUMENT_ROOT'].$original_img_path.$guid.strrchr($_FILES["img_file"]["name"][$i],"."); $new_mini_file = $_SERVER['DOCUMENT_ROOT'].$mini_img_path.$guid.strrchr($_FILES["img_file"]["name"][$i],"."); move_uploaded_file($_FILES['img_file']['tmp_name'][$i], $new_org_file); list($width_org, $height_org) = getimagesize($new_org_file); switch ($_FILES["img_file"]["type"][$i]) { case "image/jpeg": $image_org = imagecreatefromjpeg($new_org_file); break; case "image/png": $image_org = imagecreatefrompng($new_org_file); break; case "image/gif": $image_org = imagecreatefromgif($new_org_file); break; } $image_new = imagecreatetruecolor((50*$width_org)/$height_org,50); imagecopyresampled($image_new, $image_org, 0, 0, 0, 0, (50*$width_org)/$height_org, 50, $width_org, $height_org); switch ($_FILES["img_file"]["type"][$i]) { case "image/jpeg": imagejpeg($image_new,$new_mini_file,100); break; case "image/png": imagepng($image_new,$new_mini_file,0); break; case "image/gif": imagegif($image_new,$new_mini_file); break; } imagedestroy($image_org); imagedestroy($image_new); } else { $error .= "Dateiformat nicht unterstützt. (".$_FILES['img_file']['name'][$i].")<br/>"; } }
-
Hallo avweb
avweb schrieb:
Gemäss phpinfo wird die gd-Library von LC unterstützt. Du kannst ja mal deinen Code posten, vielleicht findet jemand den Fehler.$w = 500; $h = 500; $orig_w = imagesx($_FILES["fileToUpload"]["tmp_name"]); $orig_h = imagesy($_FILES["fileToUpload"]["tmp_name"]); $w_ratio = $orig_w / $w; $h_ratio = $orig_h / $h; $ratio = $w_ratio > $h_ratio ? $w_ratio : $h_ratio; $dst_w = $orig_w / $ratio; $dst_h = $orig_h / $ratio; $dst_x = ($w - $dst_w) / 2; $dst_y = ($h - $dst_h) / 2; $thumbnail = imagecreatetruecolor($w, $h); imagecopyresampled($thumbnail, $_FILES["fileToUpload"]["tmp_name"], $dst_x, $dst_y,0, 0, $dst_w, $dst_h, $orig_w, $orig_h);
Und die Variable
benutze ich dann in der Funktion$thumbnail
anstattmove_uploaded_file()
$_FILES["fileToUpload"]["tmp_name"]
Der Upload selbst funktioniert einwandfrei.
matthias-detsch schrieb:
Vielen Dank! Schau ich mir an, wenn aus meinem Code nichts wird.
Ich hatte mal was ähnliches gebaut, das Bild wurde dabei verkleinert, genauer gesagt auf die feste Höhe von 50.
-
Hallo,
ich habe mal etwas getestet und habe einige Fehler(?) bzw. Unklarheiten gefunden:
1. als Erstes schalte in deinem PHP-Code am besten die Fehlermeldungen ein, damit dir diese wirklich vollständig angezeigt werden:
error_reporting (E_ALL | E_STRICT); ini_set ('display_errors', 'On');
2. Die Funktionen imagesx() und imagesy() scheinen andere Datentypen zu erwarten (resource), als du Ihnen übergibst (string).
3. Damit die umgewandelte Datei auch tatsächlich wieder gespeichert wird, benötigst du ganz am Schluss eine Funktion wie z.B. imagejpeg(). Die habe ich in deinem Code nirgends gefunden. (imagecopyresampled() alleine speichert keine Datei.)
Letztendlich hat bei mir dieser Code tiptop funktioniert:
error_reporting (E_ALL | E_STRICT); ini_set ('display_errors', 'On'); $dest_path = './test.jpg'; move_uploaded_file ( $_FILES["fileToUpload"]["tmp_name"] , $dest_path ); $w = 500; $h = 500; $orig_w = imagesx(imagecreatefromjpeg($dest_path)); $orig_h = imagesy(imagecreatefromjpeg($dest_path)); $w_ratio = $orig_w / $w; $h_ratio = $orig_h / $h; $ratio = $w_ratio > $h_ratio ? $w_ratio : $h_ratio; $dst_w = $orig_w / $ratio; $dst_h = $orig_h / $ratio; $dst_x = ($w - $dst_w) / 2; $dst_y = ($h - $dst_h) / 2; $thumbnail = imagecreatetruecolor($w, $h); //imagecopyresampled($thumbnail, imagecreatefromjpeg($_FILES["fileToUpload"]["tmp_name"]), $dst_x, $dst_y,0, 0, $dst_w, $dst_h, $orig_w, $orig_h); imagecopyresampled($thumbnail, imagecreatefromjpeg($dest_path), $dst_x, $dst_y,0, 0, $dst_w, $dst_h, $orig_w, $orig_h); imagejpeg($thumbnail, $dest_path);
Die ersten beiden Zeilen dienen nur dem Debuggung und sind natürlich wieder zu entfernen, sobald das Script korrekt läuft.
Du hast zudem erwähnt, dass du move_uploaded_file() bereits anwendest, falls das so ist, kannst du an dieser Stelle die Zeile natürlich auch löschen. Ebendo den $dest_path, falls diese Variable bereits anderswo definiert ist.
Als letztes ist zu erwähnen, dass ich hier konsequent von JPEG-Dateien ausgegangen bin. Bei anderen Formaten sind natürlich die entsprechenden Funktionen (imagecreatefromjpeg() und imagejpeg()) auszutauschen.
-
Hallo avweb
avweb schrieb:
Vielen Dank für deine Hilfe! Mit deinem Script und vorallem mit deinem Tip, auch die Warnungen einzuschalten, konnte ich mein Script debuggen. Ich habe deines nicht 1:1 übernommen, denn ich möchte das Bild vor dem uploaden zuschneiden, aber trotzdem hat es mich auf den richtigen Weg geführt. Funktioniert jetzt alles.
1. als Erstes schalte in deinem PHP-Code am besten die Fehlermeldungen ein, damit dir diese wirklich vollständig angezeigt werden
Danke und Gruss -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage