PHP(gd): problem mit ImageCopyResized

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/phpgd_problem_mit_imagecopyresized_150049/page_1 - zur Vollversion wechseln!


flocky schrieb am 28.09.2005 um 13:38

ich habe ein script welches 2 bilder einliest. das eine ist das bild was ge-watermarked werden soll (jpeg), das andere ist das watermark (gif). bevor das watermark über das pic gelegt wird wirds noch auf die größe angepasst.

Code: PHP
$watermarkcopywidth = $origwidth * 0.9;
$watermarkcopyheight = $watermarkcopywidth / ($watermarkwidth / $watermarkheight);
$newwatermark = ImageCreateTruecolor($watermarkcopywidth,$watermarkcopyheight);
ImageCopyResized($newwatermark,$watermark, 0,0,0,0, $watermarkcopywidth,$watermarkcopyheight, $watermarkwidth,$watermarkheight);
das problem is jetz dass das ergebnis ($newwatermark) einfach schwarz ist. mittlerweilie bin ich draufgekommen dass es daran liegt dass das watermark als gif transparenz enthält. wenn ich das selbe gif ohne transparenz verwende funktionierts, nur die transparenz brauch ich weil ich das watermark eben mit alphablending über das gesamte pic lege.

zusammenfassend: ImageCopyResized hat einfach ein problem mit transparenten gif-files, kann ich da irgendwas machen? prinzipiell gehts ja nur darum das watermark passend zum pic zu resizen, ohne resize funktioniert ja alles.


flocky schrieb am 28.09.2005 um 13:51

solved über ein workaround:

gif ohne transparency, dafuer mit markanter hintergrundfarbe und selbige dann durch transparency ersetzt.

Code: PHP
$gay = imageColorAllocate ($newwatermark, 255, 0, 255);
ImageColorTransparent($newwatermark,$gay);


watchout schrieb am 28.09.2005 um 14:50

Ich weiss, es ist schon solved... aber :)

Wenn du statt einem GIF ein PNG verwendest hast du's viel einfacher PLUS du hast Farben mit ALPHA-Channel, also kannst du schöne Kanten usw. erzeugen ;)

Noch was: Wenn du das Watermark im GD oder GD2 Format ablegst und dann immer dieses verwendest, solltest du wesentlich bessere Performance erreichen, da das GD(2) Format im wesentlichen einem Memory-Dump entspricht, was natürlich das laden beschleunigt.


flocky schrieb am 28.09.2005 um 21:13

okay, danke für den tipp. wär nur noch gut zu wissen wie ich ein pic als gd speichere :D
hast einen function-tip wie ich das alpha für einzelne channels verarbeiten kann?


watchout schrieb am 29.09.2005 um 04:30

Zitat von flocky
okay, danke für den tipp. wär nur noch gut zu wissen wie ich ein pic als gd speichere :D
hast einen function-tip wie ich das alpha für einzelne channels verarbeiten kann?
Speichern: http://mirrors.inway.cz/manual/en/function.imagegd2.php bzw. http://mirrors.inway.cz/manual/en/function.imagegd.php - kommt halt darauf an welche GD du verwendest.

Alpha für Channels? Du meinst für R, G, B einzelne Alpha-Werte? AFAIK ist das Color-Format einfach RGBA, demnach kann nur eine "Farbe" - bzw. bessergesagt ein Pixel einen bestimmten Alpha-Wert haben, aber nicht ein Farbkanal. vielleicht meinst du auch was ganz anderes - klär mich auf ;)


flocky schrieb am 29.09.2005 um 04:37

ah, also doch mit imagegd2... gut danke

naja eigentlich hab ich eh das gemeint was du gemeint hast :D
mit ImageColorAllocateAlpha gehts ja anscheinend, nur hab ich ned ganz überrissen was das jetz genau macht. wenn ich mir das beispiel im manual anschau dann werden mal farben im pic mit einem alphawert definiert. jetz weiß ich aber nicht genau was ich damit anfangen soll, bzw. WIE ich anfangen soll. was ich ja will is das watermarkpic herzunehmen und für bestimmte farben alphawerte zu verteilen damit das watermark im endeffekt nicht 'jaggy' ist, das heisst ich brauch dazwischen auch farben, aber das wär ja mühsame kleinarbeit... oder hast du was anderes gemeint?


watchout schrieb am 29.09.2005 um 15:04

Du nimmst dein Watermark-Pic, nimmst Photoshop - oder ein ähnliches Programm - nimmst die Ebene, setzt sie auf x% Alpha und speicherst das ganze als PNG ab. GD2 sollte afaik schon volles Alpha usw. unterstützen.
Auf die Art reduzierst du auch die Arbeit die das Script zu machen hat...


flocky schrieb am 29.09.2005 um 17:17

hm naja ich hab jetz mal testweise das watermark ziemlich geblured (=>verwischt) damit der effekt besser sichtbar ist, für die einzelnen channels alpha festgelegt, das ganze hab ich dann als png gespeichert, is auch transparent. aber jetz komm ich wieder auf mein ursprüngliches problem zurück, ImageCopyResized nimmt mir die transparency wieder nicht. was transparent sein sollte ist wieder schwarz... wie gesagt gehts nur ums resizen, wenn ich das pic in der originalgröße nehmen könnte dann wär alles kein problem.


watchout schrieb am 30.09.2005 um 02:54

hmm, und du hast sicher als png-24 gespeichert?


flocky schrieb am 30.09.2005 um 03:01

naja es hat 32 bit farbtiefe, solltens zwingend 24 sein?


watchout schrieb am 30.09.2005 um 08:35

öh 32 bit PNG gibts afaik nicht, nur 24 bit Farbe + 8 Bit Alpha...

Schon imagecopyresampled probiert?

Das kommt mir echt komisch vor... Das einzige was das erklären würde is dass die GD einfach kein Alpha beim resizen unterstützt...




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026