ImageCopy Script für Ausweisgenerator! [EILIG!]

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
alexanderzwei
Mitglied
Beiträge: 173
Registriert: 04.11.2004 17:06
Wohnort: Oberursel (Taunus)
Kontaktdaten:

ImageCopy Script für Ausweisgenerator! [EILIG!]

Beitrag von alexanderzwei »

Hallo zusammen,

ich hoffe das ich hier richtig bin und vll. ein wenig Hilfe bekomme.
Es findet demnächst ein Event statt, und wir würden gerne Ausweise erstellen, damit sich unsere User gegenseitig wiedererkennen können.

Das ganze soll mit einem hochgeladenen Bild gemacht werden. Den Upload hab ich bereits auch realisiert, fehlt nur noch eine Überprüfung für die Bildgröße. Allerdings komme ich mit dem erstellen des Ausweises einfach nicht voran. Ich bin zwar so oder so kein Experte aber ein kleines wenig kenne ich mich mit PHP aus, nur imagecopy ist noch totales Neuland für mich. Ich schlage mich damit jetzt seit ca. 1 Woche rum und bekomme es einfach nicht hin, ca. 5 oder mehr Bilder zusammenzufügen. 2 sind kein Problem. Aber mit mehreren krieg ichs nicht hin. Auch Google und Co. konnten mir nicht weiterhelfen. Ich blicke in den ganzen Scripts nicht durch und kann die so nicht an meine Bedürfnisse anpassen. Dazu kommt ja noch dass dies auch noch mit imagecreatetruecolor gemacht werden muss, wegen der Farben.

Ich würde euch gerne mal fragen, ob jemand vll. so freundlich wäre, ein solches kleines Script zu programmieren. Gestaltung, Anpassung an phpBB3 etc. sind erstmal egal, das würde ich übernehmen.

Oder vielleicht kann mir ja jemand auch einen kleinen Tipp geben?

Mein jetztiges Script:

Code: Alles auswählen

function event_card($card_bg) { 

$card_bg = imageCreateFromPNG($phpbb_root_path.'images/pkmnday_card/card_bg.png');
$eventlogo = imageCreateFromPNG($phpbb_root_path.'images/event_logo.png');

imageCopy($card_bg, $eventlogo,
               0, 0,
               0, 0,
               157, 115);
header("Content-Type: image/PNG", true);
imagePNG($card_bg);
}
Wie gesagt, es muss das hochgeladene Bild auch noch dazu. Ich hatte mir gedacht, den Bildnamen per $_GET zu übermitteln. Das ganze heißt bei mir momentan

Code: Alles auswählen

$_GET['pic'];
.

Den Aufbau den ich momentan habe ist:
1. event_card.php - Formular Bild hochladen
2. event_cardupload.php - Script zum Hochladen
3. event_card.php mit $_GET['pic'] - Hochgeladenes Bild anzeigen und Link zum Ausweis
4. event_cardgen.php - Fertig erstellter Ausweis (Hochgeladenes Bild [Dateiname] auch per $_GET übermittelt)

Das ist das, was ich mir gedacht habe.

Vielleicht habt ihr ja bessere Ideen als ich.

Für jede Hilfe wäre ich unendlich dankbar, da das Event schon am 06.09.08 beginnt, also die Zeit drängt. Für Hilfe bedanke ich mich schonmal im Voraus.

Grüße,
Alexander P.
Vielleicht ist das Leben ja ein Integer. Wenn man negativ genug denkt, wirds irgendwann positiv..
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

An welcher Stelle hakt es denn bzw. welcher Fehler tritt auf?
KB:knigge
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Aber wenn du zwei Bilder zusammen bekommst, dann müsstest du doch auch 5 hinkriegen? Selbst wenn du alle dann einzeln zusammenfügst sind es immer nur zwei auf einmal.

Ich würde das sowieso versuchen so aufzubauen, dass du nur zwei Bilder ineinander fügen musst. Du nimmst den Upload, passt den dann in der Größe an und fügst das Bild dann an festen Koordinaten in das andere Bild ein. Sofern du einen Rahmen über einige Teile des Bildes legen musst würde ich danach dann eben danach noch auf die gleiche Weise den Rahmen einfügen.

Viel mehr als [php:imagecopyresampled] und [php:imagecopymerge] dürftest du dafür eigentlich nicht brauchen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
alexanderzwei
Mitglied
Beiträge: 173
Registriert: 04.11.2004 17:06
Wohnort: Oberursel (Taunus)
Kontaktdaten:

Beitrag von alexanderzwei »

Vielen Dank für eure Antworten.

Das mit den zwei Bildern haut allerdings leider nicht hin.

Ich habe da einmal den Hintergrund, dann den Rank, das hochgeladene Bild und das Logo von dem Event, was ich über das hochgeladene Bild setzen möchte.
Dann bräuchte ich noch imagestring() um den Benutzernamen einzufügen.

Ich verstehe nicht, wie ich das programmieren soll.
Auch das PHP Manual hat mich da nicht weitergebracht..

Ein Befehl wäre für mich bestimmt kein Problem, aber alle auf einmal.. :(

Grüße,
Alex
Vielleicht ist das Leben ja ein Integer. Wenn man negativ genug denkt, wirds irgendwann positiv..
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Du kannst die Befehle doch einfach alle untereinander schreiben? Also diese Zeilen

Code: Alles auswählen

$eventlogo = imageCreateFromPNG($phpbb_root_path.'images/event_logo.png');
imageCopy($card_bg, $eventlogo,
               0, 0,
               0, 0,
               157, 115); 
einfach für jedes zu kopierende Bild wiederholen.

Am besten danach jeweils noch ein

Code: Alles auswählen

imagedestroy($eventlogo);
einfügen, um den belegten Speicher freizugeben.
KB:knigge
Benutzeravatar
alexanderzwei
Mitglied
Beiträge: 173
Registriert: 04.11.2004 17:06
Wohnort: Oberursel (Taunus)
Kontaktdaten:

Beitrag von alexanderzwei »

Ja, das hatte ich mir auch schon überlegt.. nur weiß ich nicht, wie ich das oben generierte Bild in den nächsten Befehl einfügen soll, oder passiert das automatisch?

Ich kanns ja mal probieren.
Vielleicht ist das Leben ja ein Integer. Wenn man negativ genug denkt, wirds irgendwann positiv..
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Stell dir $card_bg einfach als Leinwand vor, auf die du nach und nach die Einzelnen Elemente draufmalst. Du musst natürlich auf die richtige Reihenfolge achten (weiter unten im Code gezeichnete Elemente überschreiben vorher gezeichnete), aber ansonsten kannst du unbegrenzt oft imagecopy() & co. verwenden.
KB:knigge
Benutzeravatar
alexanderzwei
Mitglied
Beiträge: 173
Registriert: 04.11.2004 17:06
Wohnort: Oberursel (Taunus)
Kontaktdaten:

Beitrag von alexanderzwei »

Ok, danke für die Antworten.

Mir geht es momentan nicht so gut, aber sobald es mir wieder besser geht (das ist hoffentlich bald), werde ich das mal ausprobieren.

Grüße,
Alex
Vielleicht ist das Leben ja ein Integer. Wenn man negativ genug denkt, wirds irgendwann positiv..
Benutzeravatar
alexanderzwei
Mitglied
Beiträge: 173
Registriert: 04.11.2004 17:06
Wohnort: Oberursel (Taunus)
Kontaktdaten:

Beitrag von alexanderzwei »

Sry für Doppelpost, möchte das ganze nicht schieben, es gibt nur neues:

Ich habe das jetzt mal hintereinander gesetzt.

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include_once($phpbb_root_path . 'includes/functions_display.' . $phpEx);

pkmnday_card($card_bg);

function pkmnday_card($card_bg) { 

$card_bg = imageCreateFromPNG($phpbb_root_path.'images/pkmnday_card/card_bg.png');
if ($_GET['type'] = "image/png") {
	$userpic = imageCreateFromPNG($phpbb_root_path.'images/pkmnday_card/upload/'.$_GET['pic']);
} else {
	$userpic = imageCreateFromJPEG($phpbb_root_path.'images/pkmnday_card/upload/'.$_GET['pic']);
}
$pkmndaylogo = imageCreateFromPNG($phpbb_root_path.'images/pkmnday_card/pkmnday_logo.png');

imageCopy($card_bg, $userpic,
               10, 10,     	/* imagecopy() an die Stelle ( 60, 95) in $card_bg, */
               0, 0,     	/* der zu kopierende Bereich beginnt in $userpic bei ( 0, 0) */
               85, 110);  	/* und ist 85 Pixel breit und 110 Pixel hoch */
imageCopy($card_bg, $pkmndaylogo,
               60, 95,     	/* imagecopy() an die Stelle ( 10, 10) in $card_bg, */
               0, 0,     	/* der zu kopierende Bereich beginnt in $pkmndaylogo bei ( 0, 0) */
               69, 32);     /* und ist 69 Pixel breit und 32 Pixel hoch */
header("Content-Type: image/PNG", true);
imagePNG($card_bg);
}
Geht soweit auch ganz gut.
Nur möchte ich die reinkopierten Bilder gerne noch in TrueColor haben.
Ich habe $pkmndaylogo teilweise über das Userbild gelegt, und da soll der Hintergrund transparent sein.
Mit den Lösungen, die ich über Google gefunden hatte, funktioniert es leider nicht.
Nicht zu vergessen wäre dann noch ImageString, um Ranknamen und Benutzernamen einzutragen, am besten mit eigenem Font.
Da ich festgestellt habe, das $user->data['username'] so nicht funktioniert, nehme ich an, das man das Script irgendwie in eine phpBB3 Seite integrieren muss. Also ich weiß hier wirklich nicht mehr weiter. Alleine schaff ich das nicht mehr, dafür müsste ich in kurzer Zeit noch zu viel lernen. :(
Kann mir da jemand weiterhelfen? Ich wäre demjenigen unendlich dankbar.. ;)

Grüße,
Alexander P.
Vielleicht ist das Leben ja ein Integer. Wenn man negativ genug denkt, wirds irgendwann positiv..
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Vielleicht solltest du versuchen von vorne herein mit einem True Color Bild zu arbeiten indem du [php:imagecreatetruecolor] benutzt. Das erzeugst du mit der Größe die du brauchst und kopierst dann alle anderen Elemente hinein. Um den Alphakanal zu verwenden könnte es sein, dass du dir erst eine transparente Farbe definieren musst ([php:imagecolorallocatealpha]) und dann das ganze Bild damit füllen musst bevor du die anderen Bildelemente einfügst ([php:imagefilledrectangle]). Ob das dann auch tatsächlich mit den Bildern funktioniert ist eine andere Sache. Evtl. hilft es auch eine der Farben in einem der bestehenden Bilder vor dem kopieren als Transparent zu definieren ([php:imagecolortransparent]).

Als Anmerkung nebenbei: Du solltest wenn möglich nicht $_GET an diesen Stellen verwenden. Mit den URL Parametern kann man ordentlich Schindluder treiben, besser wäre es sich auf andere Dinge zu verlassen und zum Beispiel $_FILE zu verwenden.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“