Seite 1 von 1

Bilder skalieren

Verfasst: Do 30. Dez 2004, 22:10
von NobodyBody
Hallo,

ich möchte mit einem Modul vorhandene Bilder skalieren.
Dabei bin ich auf die beiden Funktionen 'capiImgScale' und 'capiImgScaleHQ' aus der 'functions.api.images.php' gestossen.

In mein Modul eingebunden funktioniert soweit alles wunderbar :)

Es gibt dabei nur einen Hacken :roll:
Vorhanden ist ein GIF-Bild mit transparenten Flächen.
Wenn ich das Bild mif der Funktion 'capiImgScale' skaliere und im Browser einbinde, werden die transparenten Flächen mit einer Farbe gefüllt.
Verwende ich die Funktion 'capiImgScaleHQ' sind die transparenten Flächen schwarz. :?

Kann man das irgendwie Umgehen :?:

Danke :!:

Verfasst: Do 30. Dez 2004, 22:57
von timo
nein leider nicht...das geht technisch mit gif's nicht.

Verfasst: Fr 31. Dez 2004, 09:52
von kummer
doch, das geht schon. vorausgesetzt, es müssen dann nicht mehr unbedingt gifs sein, sondern es dürfen pngs daraus gemacht werden. und du hast die gd-lib 2.

(1) bild einlesen

(2) neues bild gleicher grösse erstellen (normal, nicht true color)

(3) gif bild in das neue bild setzen

(4) transparente farbe ermitteln (z.b. pixel auf position 0,0 oben links ganz am rand oder sonst ein bereich, von dem du sicher sein kannst, dass er transparent ist)

(5) dann beim png diese farbe auf transparent stellen

(6) png erstellen und ausgeben oder speichern.

gruss,
andreas

Verfasst: Fr 31. Dez 2004, 10:59
von NobodyBody
Danke

für die Antworten.:wink:

Werd's gleich mal probieren.


mfg 8)

Verfasst: Fr 31. Dez 2004, 11:05
von kummer
folgender code stammt aus einem meiner module zur erstellung von navigationsgraphiken. z.t. sind die variablen aus einem globalen kontext. aber immerhin sieht man, welche funktionen von php resp. der gd-lib verwendet werden:

Code: Alles auswählen

// erforderliche bildbreite ermitteln
		$rahmenmass = imagettfbbox($this->font['size'], 0, $this->font['type'], $text);
		$resultierende_bildbreite = 2 * $this->margin + ($rahmenmass[2] - $rahmenmass[0]);

		// neues bild anlegen
		$dim = @ imagecreate($resultierende_bildbreite,$this->bildhoehe);

		// hintergrundfarbe setzen
		$hintergrundfarbe = ImageColorAllocate($dim, 100, 100, 100);

		// transparenz festlegen
		imagecolortransparent($dim, $hintergrundfarbe);

		// bild mit hintergrundfarbe f¸llen
		imagefill($dim, 0, 0, $hintergrundfarbe);

		// textfarbe festlegen
		if (!$highlighted) {
			$text_color = ImageColorAllocate($dim, $this->fontcolor[0], $this->fontcolor[1], $this->fontcolor[2]);
		} else {
			$text_color = ImageColorAllocate($dim, $this->fontcolor[3], $this->fontcolor[4], $this->fontcolor[5]);
		}

		// text ausgeben
		imagettftext($dim, $this->font['size'], 0, $this->margin['left'], $this->textposition, - $text_color, $this->font['type'], $text);

		// bild speichern
		ImagePNG($dim, $this->bildzielpfad['backend'].$filename);
ich hoffe, das hilft dir ein wenig weiter.

gruss,
andreas

Verfasst: Di 11. Jan 2005, 11:39
von NobodyBody
Danke :wink:

Verfasst: Di 11. Jan 2005, 11:43
von timo
Naja ich meinte eigentlich eher eine Anti-Aliased Skalierung...die ist nur dann möglich, wenn man einen Browser hat, der PNG's mit Alpha-Channel kann...und das sind leider im Moment sehr wenige

Wenn man nur auf Pixelebene arbeitet, sieht das Ergebnis zwar nicht gut aus, aber funktioniert einigermaßen.

Verfasst: Di 11. Jan 2005, 11:47
von kummer
es geht leider nur mit png8 und nicht mit true color bildern. das ist schon richtig. aber gifs waren ja auch nicht wirklich besser (auch 8-bit). insofern gibt es keine verschlechterung bei der skalierung von gifs. png24 wäre wohl besser; aber insbesondere der ie kann die alpha-kanäle leider nicht richtig interpretieren.

Verfasst: Di 11. Jan 2005, 11:51
von timo
vielleicht ändert sich ja etwas mit IE7...oder Firefox setzt sich durch, was ich aber nicht wirklich glaube...

Drücken wir mal die Daumen! PNG's mit Alpha-Channel sind schon recht "funky"

Verfasst: Di 11. Jan 2005, 11:54
von kummer
also ich hoffe natürlich, dass sich der bessere browser durchsetzen wird. und das ist ja wohl firefox - ich nehme mal an, da sind wir uns einig... :lol:

Verfasst: Di 11. Jan 2005, 12:04
von timo
kummer hat geschrieben:also ich hoffe natürlich, dass sich der bessere browser durchsetzen wird. und das ist ja wohl firefox - ich nehme mal an, da sind wir uns einig... :lol:
Ich halte mich mit solchen Aussagen immer recht stark zurück ;)

Aber ich sage immer: Firefox works for me ;)

Verfasst: Di 11. Jan 2005, 12:09
von kummer
was ja das gleiche heisst... :wink: