 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
03.01.2005, 10:11
|
#1
|
|
TP-Supporter
Registriert seit: Jul 2002
Ort: Frankfurt/M.
|
zwei Bilder mit PHP überlagern lassen
hallo alle zusammen,
ich arbeite derzeit an einer klasse, die alle angelegenheite rund um vom user hochgeladende bilder managen soll (validieren, speichern, größenänderungen, komprimieren usw.)
u.a. soll es auch die möglichkeit geben, die bilder mit einem gege. Textstring zu versehen, z.B. einem Copyright o.ä.
dazu habe ich mit eine kleine Methode geschrieben, die ein geg. Bild öffnet,
ein 2tes Bild mit einem Textstring generiert und danach beide Bilder "ineinander" kopiert und wieder speichert.
Folgendes kam dabei heraus:
PHP-Code:
/**
* AddWatermark
* platziert einen geg. Textstring in geg. Bilddatei
*/
function AddWatermark($SrcImgPath,$TxtString) {
/* Allg. Variablen */
$SrcImgPath = "/www/_Testdir_local/image-process/uploaded_resized/_X_20041231164330_CIMG0005.JPG";
$FontType = imageloadfont('proggyclean.gdf');
$PaddingHeight = 4;
$PaddingWidth = 8;
/* Abmessungen d. Wasserzeichens festlegen */
$StringWidth = imagefontwidth($FontType) * strlen($TxtString)+$PaddingWidth;
$StringHeigth = imagefontheight($FontType)+$PaddingHeight;
/* Text- und Hintergrundfarbe fuer Wasserzeichen */
$StrImg = imagecreate($StringWidth,$StringHeigth);
$BackColor = imagecolorallocate($StrImg,174,171,182);
$TxtColor = imagecolorallocate($StrImg,255,255,255);
/* Handler d. Textbildes mit Text versehen */
imagestring($StrImg,$FontType,$PaddingWidth/2,$PaddingHeight/2,$TxtString,$TxtColor);
/* Handler vom Orginalbild erstellen */
$SrcImg = imagecreatefromjpeg($SrcImgPath);
/* Aus beiden Handlern ein Bild machen (StrImg in SrcImg einkopieren) */
imagecopymerge($SrcImg,$StrImg,0,0,0,0,$StringWidth,$StringHeight,100);
/* Neues Bild (Orginalbild mit Beschriftung) speichern */
imagejpeg($SrcImg,"/www/_Testdir_local/image-process/uploaded_resized/TEST3.JPG");
} // function AddWatermark
Pfade u.ä. habe ich zum Testen mal hartcodiert.
Aber irgendwas stimmt nicht, das "Ausgabebild" TEST3.JPG besteht leider nur aus einer Kopie des Orginalbildes, mehr nicht. Da ist kein Textstring drin. Wenn ich mir aber den Textstring $StrImg als Bild ausgeben lasse, ist es korrekt.
Beide Bilder (Textstring und Kopie d. Orginalbildes) werden also richtig erzeugt.
Ich vermute mal, es hakt irgendwo bei imagecopymerge.
Bildhandler verwechselt? Falscher Gebrauch der Funktion? Fehlermeldungen bekomme ich zumindest keine. imagecopy() statt imagecopymerged klappt übrigens auch nicht :-(
vielleicht weiß jemand von euch rat?
Vielen Dank im voraus,
Grüße,
Daniel
P.S.: Nutze die GD-Lib2.0, Aufruf der o.g. Methode mit $image -> AddWatermark(NULL,"Ich bin ein Teststring"); - daran sollte es also nicht liegen (ja ich erzeuge einen String ;-))
|
|
|
03.01.2005, 23:22
|
#2
|
|
TP-Veteran
Registriert seit: Dec 2002
Ort: london
|
also ich finde auch keinen fehler, weil ich mit den funktionen nicht per du bin, aber warum schreibst du den text nicht direkt rein ins bild?
|
|
|
03.01.2005, 23:41
|
#3
|
|
TP-Supporter
Registriert seit: Jul 2002
Ort: Frankfurt/M.
|
hi,
im prinzip mache ich ja genau das - ich erzeuge zuerst das bild mit dem text, und will dann beide bilder zu einem "verschmelzen".
damit schreibe ich den Text ja schon "direkt" ins Bild.
Das ich vorher den Text in "Bildform" erzeugen muss, darum komme ich nicht herum.
Eine Funktion zum "direkten" Beschriften von Bildern ist mit nicht bekannt
(bzw. eigentlich schon: imagestring(), aber genau die benutze ich ja auch ;-))
lass mich da aber zu gern eines besseren belehren?
Grüße,
Daniel
|
|
|
04.01.2005, 19:07
|
#4
|
|
TP-Supporter
Registriert seit: Jul 2002
Ort: Frankfurt/M.
|
kann mir den keiner weiterhelfen?
es muss irgendeine kleinigkeit seinn an der es scheitert...
|
|
|
04.01.2005, 22:20
|
#5
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
Könnte es vielleicht am $StrImg Handler liegen.
Du weist den Handler nur hier
$StrImg = imagecreate($StringWidth,$StringHeigth);
zu.
Du änderst das Bild zwar, vielleicht fehlt aber die nochmalige Zuweisung.
Vielleicht mal so probieren:
$StrImg =& imagecreate($StringWidth,$StringHeigth);
oder so:
$StrImg = imagestring($StrImg,$FontType,$PaddingWidth/2,$PaddingHeight/2,$TxtString,$TxtColor);
oder das Bild einfach abspeichern und mit einem neuen Händler öffnen.
__________________
<table> was my first love and it will be my last
|
|
|
05.01.2005, 03:00
|
#6
|
|
TP-Supporter
Registriert seit: Jul 2002
Ort: Frankfurt/M.
|
hi deck16,
daran lags leider auch nicht - es hatte irgendwas mit der berechnung der größe des schriftbildes zu tun....
hab es stück für stück auseinandergenommen.
die fertige methode sieht jetzt so aus:
PHP-Code:
/**
* AddTextWatermark
* platziert einen geg. (einzeiligen) Textstring in geg. (JPG)Bilddatei
*/
function AddTextWatermark($SrcImgPath,$TxtString) {
/* Allg. Variablen */
$FontType = 'proggyclean.gdf';
$PaddingHeight = 4;
$PaddingWidth = 8;
$transparency = 80;
$RGBValuesBG = array(174,171,182);
$RGBValuesFont = array(255,255,255);
/* Pruefen, ob Font vorhanden und Laden */
if(file_exists($FontType)) {
$FontType = imageloadfont($FontType);
} else {
return FALSE; }
/* Abmessungen d. Wasserzeichens festlegen */
$StringWidth = imagefontwidth($FontType) * strlen($TxtString)+$PaddingWidth;
$StringHeigth = imagefontheight($FontType) + $PaddingHeight;
/* Text- und Hintergrundfarbe,Handler fuer Wasserzeichen */
$StrImg = imagecreate($StringWidth,$StringHeigth);
$BackColor = imagecolorallocate($StrImg,RGBValuesBG[0],RGBValuesBG[1],RGBValuesBG[2]);
$TxtColor = imagecolorallocate($StrImg,$RGBValuesFont[0],$RGBValuesFont[1],$RGBValuesFont[2]);
/* Handler d. Textbildes mit Text versehen */
imagestring($StrImg,$FontType,$PaddingWidth/2,$PaddingHeight/2,$TxtString,$TxtColor);
/* Handler vom Orginalbild erstellen */
$SrcImg = imagecreatefromjpeg($SrcImgPath);
/* Aus beiden Handlern ein Bild machen (StrImg in SrcImg einkopieren) */
imagecopymerge($SrcImg,$StrImg,0,0,0,0,$StringWidth,$StringHeigth,$transparency);
/* Neues Bild (Orginalbild mit Beschriftung) ueberschreiben */
imagejpeg($SrcImg,$SrcImgPath);
} // function AddTextWatermark
und das klappt ! Yeah ! 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:45 Uhr.
|
 |