Bildausschnitt generieren

Hallo

heute ist der erste Tag mit dem zusammentreffen der GD-Lib. Ein Script zum hochladen eines Bildes habe ich schon gefunden. Funktioniert auch.

Von einem hochgeladenen Bild muss ich nun ca. 50 Bildausschnitte generieren lassen (sozusagen per Zufall) um mir eines davon aussuchen zu können.
Jedoch nicht alle von 100% (Bildgröße) des hochgeladenen Bildes, sondern mal von 70% oder 40% aus. Jenachdem wie mein Zufallscript am Ende arbeitet.
Es müssen nicht 50 sein, vielleicht auch nur 10 und wenn mir keines gefällt wird einfach das Zufallscript wiederholt.

Was mir jedoch nicht so ganz klar ist… müssen diese neuen 70% oder 40% Bildergrößen sowie alle 50 Bildausschnitte (bzw. eines mit nebenstehenden und unternanderliegenden Ausschnitte) abgespeichert werden? Oder kann man das irgendwie im Speicher machen?

Gruß
Michael

Von einem hochgeladenen Bild muss ich nun ca. 50
Bildausschnitte generieren lassen (sozusagen per Zufall) um
mir eines davon aussuchen zu können.
Jedoch nicht alle von 100% (Bildgröße) des hochgeladenen
Bildes, sondern mal von 70% oder 40% aus. Jenachdem wie mein
Zufallscript am Ende arbeitet.
Es müssen nicht 50 sein, vielleicht auch nur 10 und wenn mir
keines gefällt wird einfach das Zufallscript wiederholt.

war das nun ne Frage oder ne Beschreibung?

Was mir jedoch nicht so ganz klar ist… müssen diese neuen
70% oder 40% Bildergrößen sowie alle 50 Bildausschnitte (bzw.
eines mit nebenstehenden und unternanderliegenden Ausschnitte)
abgespeichert werden? Oder kann man das irgendwie im Speicher
machen?

nein, es muss nicht gespeichert werden.
Allerdings wirst Du ein Script brauchen, das dann von anderen Scripten aufgerufen wird. Du musst nämlich für jedes Bild den Header mitschicken z.b. header(„Content-type: image/jpeg“); für ein jpg-Bild…
Allerdings kannst Du in dem Script auch gleich Deinen Zufallsgenerator laufen lassen oder mit übergebenen Werten arbeiten.

Du kannst dann sogar das Bild mit der Endung .php in ein img src tag setzen und es wird auch als Bild angezeigt - zumindest bin ich bisher noch keinem Browser begegnet, der sich dagegen geweigert hat…

Grüße
Munich

war das nun ne Frage oder ne Beschreibung?

Nur eine kurze Beschreibung :wink:

…Oder kann man das irgendwie im Speicher machen?

nein, es muss nicht gespeichert werden.
Allerdings wirst Du ein Script brauchen, das dann von anderen
Scripten aufgerufen wird. Du musst nämlich für jedes Bild den
Header mitschicken z.b. header(„Content-type: image/jpeg“);
für ein jpg-Bild…
Allerdings kannst Du in dem Script auch gleich Deinen
Zufallsgenerator laufen lassen oder mit übergebenen Werten
arbeiten.

Du kannst dann sogar das Bild mit der Endung .php in ein img
src tag setzen und es wird auch als Bild angezeigt - zumindest
bin ich bisher noch keinem Browser begegnet, der sich dagegen
geweigert hat…

Ich stelle mir das jetzt so vor.
Nach dem Hochladen des Originalbildes rufe ich eine Funktion auf.
z.b. tumbrandom(„bilder/grafik.jpg“);

In dieser Funktion „tumbrandom(jpgfile)“ gibt es eine Zufallsschleife. Innherhalb dieser Schleife rufe ich dann mit

war das nun ne Frage oder ne Beschreibung?

Nur eine kurze Beschreibung :wink:

gut, ich hatte nämlich befürchtet, dass ich das raussuchen muss ^^

…Oder kann man das irgendwie im Speicher machen?

nein, es muss nicht gespeichert werden.
Allerdings wirst Du ein Script brauchen, das dann von anderen
Scripten aufgerufen wird. Du musst nämlich für jedes Bild den
Header mitschicken z.b. header(„Content-type: image/jpeg“);
für ein jpg-Bild…
Allerdings kannst Du in dem Script auch gleich Deinen
Zufallsgenerator laufen lassen oder mit übergebenen Werten
arbeiten.

Du kannst dann sogar das Bild mit der Endung .php in ein img
src tag setzen und es wird auch als Bild angezeigt - zumindest
bin ich bisher noch keinem Browser begegnet, der sich dagegen
geweigert hat…

Ich stelle mir das jetzt so vor.
Nach dem Hochladen des Originalbildes rufe ich eine Funktion
auf.
z.b. tumbrandom(„bilder/grafik.jpg“);

In dieser Funktion „tumbrandom(jpgfile)“ gibt es eine
Zufallsschleife. Innherhalb dieser Schleife rufe ich dann mit

Um den Befehl imagecopyresized etwas zu erläutern:
Sollte der Bildausschnitt fixe Werte haben (z.B 40x40px), und das Ausgangsbild ein JPEG sein, gehst du folgendermaßen vor:

//Pfad zum Bild in Variable ablegen
$file = ;
//Bild einlesen. Dies ist für weitere Schritte wichtig (Ressource als Rückgabewert)
$image = imagecreatefromjpeg($file);

//jetzt ein leeres Bild erstellen, wo nacher der Ausschnitt reinkopiert wird (40 mal 40 Pixel groß)
$ausschnitt = imagecreatetruecolor(40,40);

//Nun der Teil, wo du einen Bildausschnitt aus deinem „Quell“-Bild in das neu dafür angelegte Bild kopierst
//Wofür X und Y stehen ist ein bisschen Tricky:
//X und Y stehen für die Startpositionen des zu kopierenden Bereiches. Ganz links oben im Bild ist die Position P(0|0). Ein Pixel nach rechts wäre P(1|0), oder ein Pixel nach unten wäre P(0|1). Von X und Y aus gehend wird dann ein rechteck gespannt (40x40 Pixel), welches kopiert wird.
imagecopyresized($ausschnitt, $image, 0, 0, X, Y, 40, 40, 40, 40);

Jetzt hast du dein Bildausschnitt (meines Wissens nach im PNG Format). Dieses „liegt unter“ $ausschnitt.

Erst mal Danke an MunichFreak und ButterkeksXXL
Habe es soweit geschafft. In einer For-Schleife wird diese PHP 10 mal aufgerufen (mit

Geht wohl doch!
Also jetzt scheint es doch zu gehen… es war wohl irgendwie noch was im Cache-Speicher. Hatte nämlich mit diesen Zahlenwerten herumexpermimentiert.

imagerectangle($timg, 0, 0, 83, 70, $color);
imagerectangle($timg, 1, 1, 82, 69, $color);

Gruß
Michael