Seite 1 von 1

[4.9.6] Image Transparentz

Verfasst: Mi 7. Jan 2015, 11:37
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

Re: [4.9.6] Image Transparentz

Verfasst: Mi 7. Jan 2015, 12:47
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?

Re: [4.9.6] Image Transparentz

Verfasst: Mi 7. Jan 2015, 13:04
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.

Re: [4.9.6] Image Transparentz

Verfasst: Mi 7. Jan 2015, 17:23
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.

Re: [4.9.6] Image Transparentz

Verfasst: Do 8. Jan 2015, 08:30
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.

Re: [4.9.6] Image Transparentz

Verfasst: Do 8. Jan 2015, 09:08
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!

Re: [4.9.6] Image Transparentz

Verfasst: Do 12. Feb 2015, 13:06
von frederic.schneider_4fb
Das Problem ist in CONTENIDO 4.9.7 behoben