Linux negative screen / Xcalib

 ( log69 | 2018. november 21., szerda - 23:58 )

Sziasztok,

Régóta használom az "xcalib -i -a" parancsot Linux alól hogy éjjel negáljam a desktop képet böngészéshez és fejlesztéshez. Nagyon szemkímélő.

Azonban a színek is negálódnak. Viszont ha rá tudnánk vinni egy 180 fokos eltolást HUE értékben (vagy RGB shift ami sima értékek cseréje), akkor a színek megmaradnak, miközben a fehér és fekete felcserélődik. Vannak még finomabb megoldások, melyek figyelembe veszik a színek erősségét is, de nekem az említett egyszerűbb is megtenné. További infó a témában:

https://github.com/vn971/linux-color-inversion

Példa parancs Image Magick-kel (invertál és 180 fokkal eltolja (vissza tolja) a színeket):

convert input.png -negate -modulate 100,100,0.5 output.png

Xcalib Github fiókjában már nyitottak erre feature request-et, lásd itt:

https://github.com/OpenICC/xcalib/issues/2

Nem lenne kedve valakinek átírni a forrást RGB shift-tel? Mivel tud negálni a kód, ezért az érték csere nem szabad hogy túl bonyolult legyen. Sima C kód, egyetlen fájl az egész:

https://github.com/OpenICC/xcalib/blob/master/xcalib.c

Fel tudnék ajánlani érte valamit cserébe (akár pénzt). Windows-ra létezik a fenti linken is leírt NegativeScreen nevű cucc, de itt az Xcalib nagyon lightweight és platform barát lenne. Nem függ a compositortól.

A Linux közösségnek nagy segítség lenne szerintem.

Köszönöm.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Szerintem inkább olyan cuccot használj, ami szűri a kék fényt, pl. http://jonls.dk/redshift/ . Minden szín sokkal természetesebb lesz.

Kösz de ez nem oldja meg azt amit a fenti.

Tudom, hogy nem a konkrét kérdésre volt válasz, de az eredeti problémát (szemkímélés) megoldja, és működik out of the box.

Tényleg kösz, de már próbáltam régebben és nem annyira jó, mert az olvashatósághoz a nagyobb kontraszt jó. viszont fehér háttérnél ezt azzal kapom meg laptopon, ha növelem a fényerőt - de közben éjjel minimalizálni akarom a fényerőt - vagyis az igényem az, hogy minél kisebb fényerővel minél nagyobb kontraszt legyen.

A kettő ellentétes lenne, kivéve ha negatívba kapcsoljuk a képet. Ott növelhetem a fényerőt, melynek hatására a kisebb terület fog fényesedni, vagyis a betűk, míg a nagy fényerőt jelentő háttér az fekete marad. (Ha nem fekete, akkor átkapcsolom a desktop-ot high contrast módba, ami fehér feketét csinál a weboldalból).

Ebben a színek melegségének állítása nem segít nekem jelenleg.

Milyen laptopot használsz?

Ez márka és technológia független.

Senki?

Nagy nehezen találtam megoldást.

Ugye cél a sima inverz helyett az okos inverz (vagy a HSL érték fényességének invertálásával, vagy a sima negatív előtt vagy után a HUE érték 180 fokkal való elforgatásával, mindezek azért, hogy vissza kapjuk az eredeti színeket).

Egyrészt elemeztem xcalib kódját és nem kivitelezhető, mert az csak a gamma értékekkel manipulál. Ezen kívül találtam egy jó Firefox kiegészítőt Night Reader néven, mely okos inverzet csinál a CSS motor színeinek hsl és hue manipulációs lehetőségeivel. Nagyon jól működik, de ez csak a weboldalon belül színekre működik. Kevés esetben működött rosszul csak, ez néhány speciális weboldal esetén. A böngésző menüire nem. Ráadásul Firefox sötét témája nem sötétíti be a GUI nagy részét (book mark bar bal oldalon, beállítások panel stb stb).

Van viszont egy Gnome shell kiegészítő, amely mindezt megoldja egy patch segítségével. Releváns eredeti forrás itt:

https://github.com/maiself/gnome-shell-extension-invert-color/issues/1#issuecomment-207787404

Leírásom pedig itt:

https://github.com/vn971/linux-color-inversion/issues/5#issuecomment-441218759

Bemásolva:

1) download Gnome shell extension from here:
https://github.com/maiself/gnome-shell-extension-invert-color/
2) unzip it into:
~/.local/share/gnome-shell/extensions/invert-window@maiself
3) patch the extension.js file the way written here and save it:
https://github.com/maiself/gnome-shell-extension-invert-color/issues/1#issuecomment-207787404
4) reload Gnome shell by hittin Alt+F2 and typing "r" + enter
5) install gnome-tweak-tool (unity-tweak-tool)
6) enable this extension on its Extensions panel tossing it to "on"
7) hit Ctrl+I key on a window that will go smart invert
8) Enjoy -> thank you for all the guys on the links above!

Külön a patch:

        this.set_shader_source(' \
            uniform sampler2D tex; \
            void main() { \
                vec4 color = texture2D(tex, cogl_tex_coord_in[0].st); \
                if(color.a > 0.0) { \
                    color.rgb /= color.a; \
                } \
                float maxColor = max (color.r, max (color.g, color.b)); \
                float minColor = min (color.r, min (color.g, color.b)); \
                float lightness = (maxColor + minColor) / 2.0; \
                float delta = (1.0 - lightness) - lightness; \
                color.rgb = (color.rgb + delta); \
                color.rgb *= color.a; \
                cogl_color_out = color * cogl_color_in; \
            } \
        ');

Megjegyzem, hogy a fényerőt nem egészen jól számolja, ha lesz időm kijavítani, akkor majd megírom ide a változtatást.

Itt az álatalam javított kód, ezzel közelebb vannak a valós negatív fényerőhöz a színek. Vagyis a fehér alapon fakó kék nem fekete alapon erős kék lesz, hanem fekete alapon fakó kék. Persze a még jobb megfeleltetésért ennél bonyolultabb számítás kell, hogy az azonos telítettség fehéren, azonos telítettségnek nézzen ki feketén.

        this.set_shader_source(' \
            uniform sampler2D tex; \
            void main() { \
                vec4 color = texture2D(tex, cogl_tex_coord_in[0].st); \
                if(color.a > 0.0) { \
                    color.rgb /= color.a; \
                } \
                float lightness = (color.r + color.g + color.b) / 3.0; \
                float delta = (1.0 - lightness) - lightness; \
                color.rgb = (color.rgb + delta); \
                color.rgb *= color.a; \
                cogl_color_out = color * cogl_color_in; \
            } \
        ');

Eredeti kép:

"Rossz" inverz:

"Jó" inverz:

Hogy nem folyt ki a szemed, míg ezt összegányoltad? Ja, nem, mert akkor nem kellene szemvédő...

Mi lett összegányolva?? Ez nem az én weboldalam hanem a duckduckgo-é, de példának több trilliárd weboldal képét be lehetne ide tenni, ugye egyetértesz hogy annyi nem fér ide ki?

Magic :). Nem gondoltam, hogy ilyen értelmesen tud kinézni. Érdekelne valami interaktívabb/teljesebb ábrán látni, melyik színből mi lesz így.

Nekem sajnos pont a fekete alapon világos szövegtől folyik ki a szemem, és még percekig világos csíkokat látok magam előtt.

Mert valszeg rossz környezetben használod. Se a túl sötét, se a túl világos nem jó a szemnek. Illetve ennek keretein belül a minél nagyobb kontraszt jó, mert az olvashatóbb és így kevésbé rontja a szemet. Hiába megfelelő a kép össz fényereje, ha nem tudunk disztingválni a tartalom között - és fordítva.

Ennek megfelelően én a világos alapot kedvelem egész nap, és inkább a monitor megvilágítását állítom a szoba fényéhez úgy, hogy még a kontraszt is jó legyen. Azonban amint egy bizonyos mértékű fényerő alá megy a környezet fényessége, ettől a ponttól jobb a szememnek a fekete alap.

Tehát környezet függő. Egy teljesen sötét szobában az ágyban neten olvasni jobb a sötét háttér, és ezen kereten belül lehet játszani a kontraszttal. Én nem teszem túl nagyra, se nem túl kicsire, hanem optimálisra.

BTW láttam az egyik munkádon pár éve hogy szereted a színeket és algókat (ugye a kép kitöltés minden színnel furcsa módon cuccodra gondolok). Még el akarok gondolkodni hogyan tudnám színprofil nélkül tovább közelíteni függvénnyel a "negatív" fényerő megállapítását, hogy pontosabb legyen a szaturáció negatívban az eredetihez képest, de ha érdekel, jó lenne kigyúrni valami egyszerű és hatékonyat. Ahogy látod feljebb, egyetlen sor a mérvadó kód, elég faék. Persze dícséretes hogy a többi részével összerakták.

Egyébként Androidra (talán 8-tól felfelé) van egy okos negatív, de nagyon lassú, és elég rosszak is a színek. Azt nem értettem hogy miért ilyen rosszat tudtak kizzadni. Akkor már a hue 180 fokos elforgatás is jobb.