• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Image-Dateien automatisch fest definiert beschneiden

blabla333

Mitglied
Hallo,

ich möchte, dass alle JPG-Dateien eines Ordners in ihrer Größe angepasst werden.
Die Dateien sind immer gleich (in ihren Dimensionen) und es soll z.B. vom oberen Rand 100 px und vom unteren Rand 50 px abgeschnitten werden.
 
Lässt sich mit PHP ohne weiteres machen. Jetzt wissen wir ja schon mal, was du möchtest, jetzt fehlt uns eigentlich nur noch eine Frage. Aber ich liefere mal eine: Was hast du bisher versucht?
 
Achja, meine Frage: Wie geht das? *grins*

Grundsätzlich möchte das Ganze möglichst anwenderfreundlich gestalten, d.h.:
1. Der User kann die Bilder per Drag'n Drop hochladen
2. Die Bilder werden automatisch beschnitten
3. Die Bilder werden angezeigt, damit man weiter mit ihnen arbeiten kann (z.B. einer Kategorie zuordnen, Titel hinzufügen usw.)

Der Post bezieht sich jetzt auf den Punkt 2. Dabei weiß ich nicht, welche Funktion ich verwenden muss.

Code:
<?php
foreach (glob("/pfad/*.jpg") as $filename) {
    # Dateien werden beschnitten
    # Dateien werden angezeigt (Liste -> Link)
}
?>

Den Punkt 1 kann ich leider nicht umsetzen. Ich habe ein Script mit dem ich die Dateien ganz gewöhnlich einzeln auswählen und hochladen kann. Aber wirklich komfortabel ist das nicht, wenn man 10 Bilder gleichzeitig hochladen möchte

Punkt 3 sollte erst einmal kein Problem sein.
 
Zuletzt bearbeitet:
Der Post bezieht sich jetzt auf den Punkt 2. Dabei weiß ich nicht, welche Funktion ich verwenden muss.
PHP: imagecreatefromjpeg - Manual
PHP: imagecreatetruecolor - Manual
PHP: imagecopy - Manual
PHP: imagejpeg - Manual

Aber wirklich komfortabel ist das nicht, wenn man 10 Bilder gleichzeitig hochladen möchte
Du könntest ja gleich mehrere Felder zum Upload anbieten. Oder google mal füttern mit
upload drag and drop jquery
 
So ganz habe ich es noch nicht verstanden:

Code:
<?php
$org_img = 'quelle.jpg';
$dst_img = 'ziel.jpg';
$crop = 20;


$xy_org = getimagesize($org_img);
$x_new = $xy_org[0] - (2 * $crop);
$y_new = $xy_org[1] - (2 * $crop);
$tmp_img = imagecreatetruecolor($x_new, $y_new);
$src_img = imagecreatefromjpeg($org_img);
imagecopy($tmp_img, $src_img, 0, 0, $crop, $crop, $x_new, $y_new);
imagejpeg($tmp_img, $dst_img, 75);
imagedestroy($tmp_img);
?>

In diesem Beispiel wird das Bild an jeder Seite um 20px beschnitten.
Ich möchte aber an jedem Rand eigens definierte "Schnitte" durchführen. Wie müsste ich das entsprechend anpassen, da das Bild ja entsprechend kleiner werden und nicht verzerrt werden soll?

Z.b.: Oben 10px, rechts 20px, unten 30px und links 40px abschneiden...
 
Die Datei ist 960x720px und ich möchte oben und links je 60 Pixel wegschneiden, unten werden 110px weggeschnitten.

Code:
foreach (glob($pfad."*.jpg") as $dateipfad) {
    $path_parts = pathinfo($dateipfad);
    $datei = $path_parts['filename'];


    $dst_x = 0;
    $dst_y = 0;
    $src_x = 60;
    $src_y = 60;
    $dst_w = 900;
    $dst_h = 550;
    $src_w = 960;
    $src_h = 610;


    $dst_image = imagecreatetruecolor($dst_w,$dst_h);
    $src_image = imagecreatefromjpeg($pfad.$datei.".jpg");
    imagecopyresampled($dst_image, $src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
    imagejpeg($dst_image, $pfad_neu.$datei.".jpg");
}

Irgendwie wird im neuen Bild ein schwarzer Rand (60px) rechts erzeugt, zudem bin ich mich nicht sicher, ob die Skalierung wirklich stimmt bzw. das erzeugte Bild sieht deutlich kleiner aus. Die Auflösung des Originalbildes ist 96, während das neue Bild 72 hat.
 
Rechnen wir mal mit der Höhe:

Das Bild ist 720px hoch. Dann willst du oben 60px wegnehmen, bleibt noch eine Höhe von 660px. Dann soll unten noch 110px weggelassen werden. Bleibt eine Höhe von 550px. Also stimmt schon mal $dst_h = 550; Jetzt stellt sich doch wohl die Frage, warum du beim Copy eine Höhe von 610px kopieren willst, oder?? Passt irgendwie nicht.
 
Zurück
Oben