[php] Bestimmten Bereich aus einem Bild ausschneiden

quicksilver

Lt. Junior Grade
Registriert
Jan. 2004
Beiträge
363
Hallo ich bin auf der suche nach der Möglichkeit aus einem bild z.b. 1600x1200px ein bestimmten Bereich auszuschneiden. z.b. immer 200x150px. und ich möchte nun die "freiheit" haben den Bereich mit bestimmten koordinaten z.b. von links oder rechts oder so anzugeben. Das ich z.b. sage 100px von links und 300px von oben das an dem Punkt der ausschnitt angesetzt wird.

Kann mir da wer helfen oder hat sowas viellleicht schon parat?!?

Vielen Dank dafür
 
PHP:
$size = array(300,200); // Breite und Höhe des Auschnitts
$point = array(100,100); // Koordinaten, ab wo kopiert werden soll (erst X, dann Y).
$image = imagecreatefromjpeg("Pics/original1.jpg"); // Original einlesen
$new = imagecreate($size[0],$size[1]);  // Neues Bild leer erstellen
imagecopyresized($new, $image, 0,0, $point[0],$point[1],$size[0],$size[1], $size[0],$size[1],); // Ausschnitt rüberkopieren 
imagejpeg($new,"Pics/neu.jpg",100); // Neues Bild speichern

Der eigendliche Befehl hier ist imagecopyresized. Die Parameter dazu gibts hier bei php.net

Das Beispiel oben (ungetestet) sollte aus dem Bild original.jpg einen Bereich von 300x200 Picel von oben und von links 100 Pixel versetzt herauskopieren und ihn in neu.jpg mit 100% Qualität speichern.
 
Hey super das klappt 1a :) aber leider ist das bild nicht die 100%tige qualität wie das ORiginal bild?!? weisst du wodran das liegen könnte?

Edit: problem gelöst: imagecreatetruecolor anstatt: imagecreate

DAnke
 
Probier mal statt imagecopyresized die Funktion imagecopyresampled.
Die Parameter sind die selben.
Also einfach
PHP:
imagecopyresized($new, $image, 0,0, $point[0],$point[1],$size[0],$size[1], $size[0],$size[1]);
mit
PHP:
imagecopyresampled($new, $image, 0,0, $point[0],$point[1],$size[0],$size[1], $size[0],$size[1]);
ersetzen.
 
Darf man mal blöd fragen, wo da der Unterschied liegt?
Also nicht, dass ich drauf beharre das meine Methode genutzt wird, aber ich würd ja auch gern was dazu lernen ;)
 
Keine Ahnung ;) geht mit beiden.

Wichtig war nur das man

Code:
imagecreatetruecolor

anstatt:

Code:
imagecreate

nimmt
 
@V1tzl1:
So genau weiß ich das auch nicht. Das Bild wird wohl "interpoliert". So stehts jedenfalls in der Beschreibung.
imagecopyresampled() copies a rectangular portion of one image to another image, smoothly interpolating pixel values so that, in particular, reducing the size of an image still retains a great deal of clarity.
Auf jedenfall wird dadurch die Qualität erhöht. Ich benutze die Funktion selbst in meiner Thumbnail-Funktion.

Beispiel:
imagecopyresized
resizedr63.jpg


imagecopyresampled
resampledsvz.jpg


//edit
BTW: Mir fällt gerade auf, dass das Bild, das mit imagecopyresampled() erstellt wurde, sogar 2kB kleiner ist.

//edit2
Etwas langsamer ist die Funktion imagecopyresampled() allerdings.
Bei meinem Test erhielt ich folgende Werte:
imagecopyresized: 4.196E-005 Sekunden
imagecopyresampled: 4.601E-005 Sekunden
Das entspricht einem Faktor von 1.096520495
Also ist die Funktion imagecopyresized() etwa 10% schneller. (Zumindest in meinem Versuch)
 
Zuletzt bearbeitet:
hehe thx wieder was dazugelernt.
Ich hatte den Codeschnipsel aus meinem Thumgenerator rauskopiert, aber dann weiß ich ja jetzt wie ich sie schöner aussehen lassen kann ;)

Und was die Zeit angeht, ich glaube da hab ich in meinem Code einige Abfragen die deutlich mehr Zeit in Anspruch nehmen, da kann ich sowas ruhig vernachlässigen, solange man keine xMillionen bilder hintereinander durchkopieren will ;)
 
Zurück
Oben