[4.9.6] Image Transparentz

Alle bestätigten Fehler in CONTENIDO 4.9 (erledigte Fehler werden durch geschlossene Beiträge gekennzeichnet).
Gesperrt
mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

[4.9.6] Image Transparentz

Beitrag von mattmarr »

Hallo!

Ist das gewollt oder ein Bug?

in der Datei "functions.api.images.php" (Contenido 4.9.6) wird in der Funktion cApiImageGetCacheFileName(), bei der switch anweisung, auf "png" und "gif" geprüft. Sollte das nicht ".png" und ".gif" heißen?

Das ist mir aufgefallen, da seit dem Update auf 4.9.6 keine Transparentz mehr in den runtergerechneten Bildern funktioniert. War ganz schön ärgerlich.



Gruß
Matthias
Faar
Beiträge: 1945
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 6 Mal
Kontaktdaten:

Re: [4.9.6] Image Transparentz

Beitrag von Faar »

In der API-Doc stehts noch mit Punkt drin: http://api.contenido.org/con490/source- ... ml#580-606

Könnte es sein, dass im $filetype schon der Punkt fehlt?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
mattmarr
Beiträge: 361
Registriert: Mo 3. Aug 2009, 14:11
Kontaktdaten:

Re: [4.9.6] Image Transparentz

Beitrag von mattmarr »

Faar hat geschrieben:In der API-Doc stehts noch mit Punkt drin: http://api.contenido.org/con490/source- ... ml#580-606

Könnte es sein, dass im $filetype schon der Punkt fehlt?
Der $filetype wird vom Contenido selbst ermittelt. Kann man in den ImageScale funktionen sehen.
Faar
Beiträge: 1945
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 6 Mal
Kontaktdaten:

Re: [4.9.6] Image Transparentz

Beitrag von Faar »

Naja, die Funktion ist nicht ganz frei von Fehleranfälligkeit.

Code: Alles auswählen

substr($filename, strlen($filename) - 4, 4
Was passiert, wenn die Dateiendungen vier Zeichen lang sind, so wie bild.tiff ?
Und warum der Umstand mit strlen()?
substr($filename,-4) sollte genügen.
Denn bei utf-8 könnte die Länge nicht ganz stimmen ("ätsch" sind laut strlen() 6 statt 5 Zeichen):

Code: Alles auswählen

$length = strlen(utf8_decode($filename)); 
Nun stell dir einfach vor, dass sich die Contenido Funktion um genau eine Stelle verrechnet, dann fehlt da ein Punkt.

Mit ...

Code: Alles auswählen

$filename = 'bild.tiff;
$filetype = strrchr($filename, ".");
echo $filetype; // ".tiff"
würde z.B. alles nach dem letzten Punkt genommen werden.
Das müsstest du mal testen.

Mach doch mal ein echo auf $filename, dann siehst du erstmal, was da drin steht.
Kann ja auch sein, dass in den Dateinamen was nicht stimmt.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [4.9.6] Image Transparentz

Beitrag von frederic.schneider_4fb »

mattmarr hat geschrieben:Hallo!

Ist das gewollt oder ein Bug?

in der Datei "functions.api.images.php" (Contenido 4.9.6) wird in der Funktion cApiImageGetCacheFileName(), bei der switch anweisung, auf "png" und "gif" geprüft. Sollte das nicht ".png" und ".gif" heißen?

Das ist mir aufgefallen, da seit dem Update auf 4.9.6 keine Transparentz mehr in den runtergerechneten Bildern funktioniert. War ganz schön ärgerlich.
Die Punkte wurden explizit herausgenommen, weil die entsprechenden Prüfungen auf die Dateitypnamen prüfen. Das Problem tauchte auf, weil die umgerechneten Bilder nicht mehr transparent waren und die Fehlerbeseitigung hat dazu geführt, dass sie wieder transparent wurden. Wieso bei Dir der Effekt komplett umgekehrt ist, entzieht sich gerade meiner Kenntnis! Ich schaue mir das heute noch einmal an.
Frederic Schneider
Entwickler bei der four for business AG
frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [4.9.6] Image Transparentz

Beitrag von frederic.schneider_4fb »

Ich habe das eben noch einmal überprüft:
Die Funktion cApiImageGetCacheFileName() wird mit dem Parameter $filetype in den Funktionen cApiImgScaleLQ(), cApiImgScaleHQ() sowie cApiImgScaleImageMagick() aufgerufen.

In den Funktionen cApiImgScaleLQ() und cApiImgScaleHQ() wird der $filetype via cFileHandler::getExtension($filename) ermittelt. Das Ergebnis ist dann entweder "jpg", "gif", "png", "tiff" et cetera. Also: Ohne Punkt. In der Funktion cApiImgScaleImageMagick() hingegen nutzen wir noch den alten Aufruf substr($filename, strlen($filename) - 4, 4). Das muss natürlich geändert werden.

Vielen Dank für Eure Hinweise!
Frederic Schneider
Entwickler bei der four for business AG
frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: [4.9.6] Image Transparentz

Beitrag von frederic.schneider_4fb »

Das Problem ist in CONTENIDO 4.9.7 behoben
Frederic Schneider
Entwickler bei der four for business AG
Gesperrt