Skip to content
This repository has been archived by the owner on Jan 1, 2020. It is now read-only.

Image Manager: Resized PNGs manche schwarz, andere kriselig/unerkennbar #101

Closed
ghost opened this issue Jan 29, 2013 · 40 comments
Closed

Image Manager: Resized PNGs manche schwarz, andere kriselig/unerkennbar #101

ghost opened this issue Jan 29, 2013 · 40 comments
Labels

Comments

@ghost
Copy link

ghost commented Jan 29, 2013

  • Hängt vermutlich mit Transparenz/Alpha-Kanälen

https://www.dropbox.com/s/njckwj40o2huq44/mediapool_pngtransp.png

https://www.dropbox.com/s/i4czffqymcnol1h/mediapool_png_broken.png

@gharlan
Copy link
Member

gharlan commented Jan 29, 2013

@jdlx Hast du hier ne Idee?

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Glaube das liegt an irgendwas lokalem bei Rudi.. evtl. GD lib Version oder so.. kenne derlei probs garnicht.
@rexdude schick mir mal son ein png das bei dir probs macht..

@ghost
Copy link
Author

ghost commented Jan 29, 2013

grad per email an deine rexdev geschickt...

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Ist hier auch broken.. was mir aufgefallen* ist: dein png enthält eine Gamma Angabe.. ungewöhnlich imho, ist mir noch nie bewußt untergekommen. Anyway, das hier scheint das prob seitens GD damit zu sein: http://stackoverflow.com/a/3314151

*interessant: nur Preview zeigt mir das in den Infos an.. Grafikkonverter, PS CS5.1..: not

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Ich kuck mal ob sich das Gamma einfach ignorieren läßt.. es scheint ein property der GD image resource zu sein. Gamma in PNGs scheint so sinnvoll zu sein wie Farbprofile im Internet:
http://f6design.com/journal/2006/12/01/fixing-png-gamma/
http://morris-photographics.com/photoshop/articles/png-gamma.html

@ghost
Copy link
Author

ghost commented Jan 29, 2013

Beim Image Resize konnt ich mich an den Effekt net erinnern, erst mit Umstellung auf Image Manager ist mir das aufgefallen.

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Probiers bitte aus..

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

@rexdude: auch dein 2. png hat n Gamma (beide 0,45).. womit strickst du die Bilder?

@ghost
Copy link
Author

ghost commented Jan 29, 2013

@jdlx Mit dem guten alten Photoshop 7 per Wine unter Linux laufend :)))

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

spooky.. ;) evtl. dort unbewußt irgend ein setting dahingehend gemacht?

Ansonst: is nix mit property setzen.. ich probier grad mal nen geschwinden hack mit dem code von stackoverflow..

@ghost
Copy link
Author

ghost commented Jan 29, 2013

@jdlx Image Resize läuft einwandfrei inkl. Transparenz. Auch das Orangene in der größeren Ansicht sieht super aus.

@ghost
Copy link
Author

ghost commented Jan 29, 2013

evtl. dort unbewußt irgend ein setting dahingehend gemacht?

Nope, da es ja bei Image Resize läuft muss es sich um einen Bug handeln...

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Meine mich zu erinnern, daß image_resize intern ziemlich anders arbeitet als IMM.. aber ich kuck mal..

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Komisch.. kann auf den ersten Blick keinen grundsätzlichen Unterschied bezügl. des png Codes erkennen.

@ghost
Copy link
Author

ghost commented Jan 29, 2013

hmm, aber irgendwas muss doch anders sein. vielleicht haben die anderen noch ne idee...

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Also ich find grad nix.. alles relevante bezügl. png scheint mir grad zwischen der class.thumbnail.in.php von image_resize bzw. den IMM Klassen class.rex_image.inc.php bzw. class.rex_effect_resize.inc.php gleich zu sein.

@ghost
Copy link
Author

ghost commented Jan 29, 2013

Google mal nach "php gd resize png black background" vielleicht kommst so weiter...

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Habs: @ IR ist imagealphablending($des, false); in IMM imagealphablending($des, true); ..

Problem: macht man an anderer Stelle was kaputt ja/nein? php.net schreibt zum blendmode:

"imagealphablending() allows for two different modes of drawing on truecolor images. In blending mode, the alpha channel component of the color supplied to all drawing function, such as imagesetpixel() determines how much of the underlying color should be allowed to shine through. As a result, gd automatically blends the existing color at that point with the drawing color, and stores the result in the image. The resulting pixel is opaque. In non-blending mode, the drawing color is copied literally with its alpha channel information, replacing the destination pixel. Blending mode is not available when drawing on palette images."

Aus der Hüfte wage ich das gerade nicht einzuschätzen.. IR war self-contained, mit den effect Klassen vom IMM ist das u.U. ein ganz anderer Tisch. Da der restliche Code ja quasi 1:1 übernommen worden war, könnte die entscheidung für das true eine bewußte gewesen sein.. evtl. mal Jan fragen ob er sich erinnert.

@ghost
Copy link
Author

ghost commented Jan 29, 2013

@jdlx fein!

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

leider nein.. es funktioniert dann für das parteienstop logo, aber nicht das andere..

@ghost
Copy link
Author

ghost commented Jan 29, 2013

hab mir eh schon fast gedacht das es vielleicht 2 probs sein könnten, weil das orangene war ja nur noch ein orangener block also kein schwarz, trotz transparenz.

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Vergleich du nochmal.. ich seh einfach grad nix mehr was anders sein soll.. fakt ist, daß IR beide gebacken bekommt.

@ghost
Copy link
Author

ghost commented Jan 29, 2013

sorry, steck da überhaupt nicht drin. kannst du nicht die funktionen/methoden mal eins zu eins aus image resize übernehmen.

oder: warten bis jan sich meldet...vielleicht weiss er worans liegt/hat ne idee.

@jdlx
Copy link
Contributor

jdlx commented Jan 29, 2013

Die sind faktisch 1:1 übernommen.. nur halt über 2 Klassen verteilt. Entweder überseh ich noch irgendwo was, oder der Effekt entsteht an anderer Stelle dies im IR nicht gibt. Ein prob dabei ist, daß sich das nicht debuggen läßt, weil alles an einer GD resource passiert.. da kann man nicht reinkucken (bzw. wüßt ich nicht wie).

@gharlan
Copy link
Member

gharlan commented Jan 30, 2013

@jdlx
Copy link
Contributor

jdlx commented Jan 30, 2013

mift.. dann hab ich beim rumprobieren wohl was geändert und es für den faktischen Status gehalten. Umso blöder.. wie gesagt, ich find nix was es mir erklärt (hab auch nimmer weitergesucht).

@gharlan
Copy link
Member

gharlan commented Jan 30, 2013

Bedeutet aber, du kannst nur das Problem mit dem einen Bild nachvollziehen? Weil du hast oben ja geschrieben, dass das Ändern von true->false bei dem anderen Bild Erfolg brachte, und es ist eigentlich ja sowieso false.

@jdlx
Copy link
Contributor

jdlx commented Jan 30, 2013

Ich teste gerade.. meld mich gleich.. grundsätzlich: ja, der IMM kriegts nicht hin.. ich muß grad erstmal nachvollziehen an welchen Schrauben ich gedreht hatte und was deren Originalstellung war ;)

@tbaddade
Copy link
Member

Ich hatte mal den Fall mit einem 3-farbigen Logo was als png gespeichert war. Nach dem Resize sah es ähnlich der französischen Flagge aus.

@jdlx
Copy link
Contributor

jdlx commented Jan 31, 2013

Bin jetzt mal nen anderen Weg gegangen und hab im IMM die Effekte durchprobiert: mache kommen klar und die Transparenz stimmt.. crop, mirror, workspace.. z.b.
Beim IR wiederum führen manche Effekte dort wiederum zum Transparenzfehler: u.a. blur, sepia..

Mal kucken ob sich daraus was ableiten läßt..

@jdlx
Copy link
Contributor

jdlx commented Jan 31, 2013

So.. das war ne f***ing schwere Geburt.. und das Gamma die komplett falsche Fährte. Bin jetzt zu müd um das noch en detail zu erklären, erstmal soviel @rexdude:

Pack mal hier vor das return https://github.com/redaxo/redaxo4/blob/master/redaxo/include/addons/image_manager/classes/effects/class.rex_effect_resize.inc.php#L75-L80 folgendes:

$this->keepTransparent($gdimage);

muß jetz endlich in die koje..

@ghost
Copy link
Author

ghost commented Jan 31, 2013

Respect, Alter! Quali is jetzt wie beim Image Resize :)

Apropo: Kann/soll das in der 4.5 eigentlich raus, das gute alte Image Resize?

@ghost
Copy link
Author

ghost commented Jan 31, 2013

Und noch was, was mir gerade schon wieder passiert is. Will ich Effekte für nen Bildtyp ändern, so klick ich immer ganz intuitiv direkt auf den Bildytp und nicht auf "Effekte berabeiten" weiter hinten und wunder mich dann jedesmal wo meine Effekte sind...Bin ich zu doof das zu lernen, oder gehts anderen auch so?

@ghost
Copy link
Author

ghost commented Jan 31, 2013

Hey REDAXO, your so fine, your so fine you blow my mind! Hey REDAXO [clap] [clap]...[clap], hey REDAXO [clap] [clap]...[clap] :-)))))

@gharlan
Copy link
Member

gharlan commented Jan 31, 2013

@jdlx Sehr cool, danke!! :)

@rexdude image_resize ist bereits seit R4.4 draußen, nur hier im Repo ist es noch.

@ghost
Copy link
Author

ghost commented Jan 31, 2013

@gharlan oh ja, stimmt!!

@jdlx
Copy link
Contributor

jdlx commented Jan 31, 2013

@rexdude: ja, das mit "Effekt bearbeiten" passiert mir auch ständig. Desweiteren wär n select gut, mit dem man auf der effect page direkt in nen anderen Bildtyp springen kann schön.. im IMM was zu machen sind immer elende Klickstrecken.

Detail zum bug: der Gag ist, daß GD resourcen zwar grundsätzlich die Transparenz Info in sich tragen, aber wenn man sie nicht anwedet, sie eben nicht im Ergebnis landen. Wenn man sich eine solche resource direkt wieder ausgeben läßt ohne - im Fall von pngs imagealphablending() & imagesavealpha() - angewendet zu haben, dann bekommt man genau das kaputte Ergebnis wie bei deinen Bildern. Jetzt wars bei deinen Bildern so, daß die zufälligerweise soo klein waren, daß jeder default rex_* Bildtyp größer wäre als die Bilder.. aber weil in jedem rex_* Bildtyp not_enlarge gesetzt ist, trat der Fall ein, daß eben returned wurde ohne das die Transparenzfunktionen zum Einsatz kamen. Noch verwirrender ist: wenn man - wie bei resize - eine frische GD resource (eben mit der resize Größe) anlegt, in welche die Original-resource per imagecopyresampled() reinkopiert wird, dann reicht es interessanterweise wenn nur für die frische resource - obwohl die erstmal überhaupt keine Bilddaten enthält, und in der Ausgabe einfach vollflächig schwarz ist - die Transparenz angeknipst wird.. sprich: alles relativ verwirrend.. deswegen saß ich da auch mal eben 3 Stunden wie ein Irrer die Einzelschritte debuggend dran.. =8-}

@ghost
Copy link
Author

ghost commented Jan 31, 2013

@jdlx Puh, 3 Stunden? Also danke vielmals! Gregor hat hier schon gleich mal den richtigen gefragt für den Job :)

@jdlx
Copy link
Contributor

jdlx commented Jan 31, 2013

yup, kein Spaß.. primär weil man eben nicht in die resourcen reinkucken kann.. die einzige Möglichkeit ist Schritt für Schritt die resource direkt auszugeben - hab mir dafür eine eigene debug func gestrickt - um direkt im Browser zu sehn wies an der Stelle der Bearbeitung um das Bild bestellt ist.

Das Thema kann potentiell auch in anderen Effekten auftreten.. zumindest wenn deren Code aus irgendwelchen Gründen dergestalt ist, daß die Transparnezfunktionen nicht zum Zuge kommen.. aber das kuck ich jetzt nicht Effekt für Effekt durch.. abwarten und wenns gemeldet würde dem dann nochmal nachgehen. In den überwiegenden Fällen wirds eben so sein, daß der IMM an erster Stelle benutzt wird um zu resizen, bzw. resize immer einer der eingesetzten Filter ist, und die Bilder eben tatsächlich runtergerechnet werden..

@ghost
Copy link
Author

ghost commented Jan 31, 2013

@dergel was meinst du dazu #101 (comment)? Evtl. vertauschen? Sonst kann man hier dann vermutlich auch closen...

gharlan added a commit to redaxo/redaxo that referenced this issue Jan 31, 2013
cukabeka added a commit to cukabeka/redaxo4 that referenced this issue Oct 31, 2014
Etliche Male $this->keepTransparent($gdimage); eingesetzt - Vgl. redaxo#101
cukabeka added a commit to cukabeka/redaxo4 that referenced this issue Oct 31, 2014
Etliche Male $this->keepTransparent($gdimage); eingesetzt - Vgl. redaxo#101
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants