• Jak kolourpaint kompresuje 8-bitowe PNG?

    From Marcin Kocur@110:300/1.1 to All on Sat Apr 13 11:41:43 2013
    Hej,

    często robię skany dokumentów w skali szaro¶ci do formatu PNG. Okazuje
    się, że najlepiej z kompresj± takich obrazków radzi sobie kolourpaint. Wystarczy otworzyć i klikn±ć zapisz, różnica to zawsze ok. 50%.

    Próbowałem ten sam efekt osi±gn±ć przez convert:
    convert -quality 0 +dither -colors 256
    wraz z optipng -o7

    Również pngcrunch nie pomaga:
    pngcrunch -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem text
    Efekt: http://upload.koci.net.pl/uploads/pngcrunch_dickensgriffith_i_my_0002.png Kolourpaint: http://upload.koci.net.pl/uploads/kolourpaint_pngcrunch_dickensgriffith_i_my_00 02.png
    (1MB vs 500kB)

    File podpowiada czym się te pliki różni±:
    pngcrunch:
    PNG image data, 2321 x 3220, 8-bit grayscale, non-interlaced
    kolourpaint:
    PNG image data, 2321 x 3220, 8-bit colormap, non-interlaced

    Szukanie po colormap i grayscale nie zwraca nic ciekawego.

    Domy¶lam się, że kolourpaint robi kompresję stratn± i być może nie do
    końca zgodnie ze sztuk±, bo gdyby na tym obrazku były kolory, to
    wyszedłby brzydko. Pytanie brzmi jednak JAK osi±gn±ć to, co robi
    kolourpaint za pomoc± poleceń tekstowych (jak mam tych plików -dziesi±t,
    to mi się nie chce klikać).

    --
    Pozdrawiam
    Marcin Kocur
    http://linux-porady.info - Linux od A do B :]

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: GTS Energis (110:300/1.1@linuxnet)
  • From Kamil =?iso-8859-2?Q?Jo=F1ca?=@110:300/1.1 to All on Sat Apr 13 13:39:54 2013
    Marcin Kocur <marcin2006@gmail.com.wytnij> writes:

    [...]

    File podpowiada czym się te pliki różni±:
    pngcrunch:
    PNG image data, 2321 x 3220, 8-bit grayscale, non-interlaced
    kolourpaint:
    PNG image data, 2321 x 3220, 8-bit colormap, non-interlaced

    Szukanie po colormap i grayscale nie zwraca nic ciekawego.

    Domy¶lam się, że kolourpaint robi kompresję stratn± i być może nie do
    końca zgodnie ze sztuk±, bo gdyby na tym obrazku były kolory, to

    Je¶li dobrze Cię zrozumiałem to po prostu
    convert -colors 255 in.png out.png
    KJ

    PS. Wydaje mi się, że z kolorami robi on co¶ takiego http://en.wikipedia.org/wiki/Indexed_color




    --
    http://sporothrix.wordpress.com/2011/01/16/usa-sie-krztusza-kto-nastepny/ Chihuahuas drive me crazy. I can't stand anything that shivers when it's warm.

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: Telekomunikacja Polska (110:300/1.1@linuxnet)
  • From Kamil =?iso-8859-2?Q?Jo=F1ca?=@110:300/1.1 to All on Sat Apr 13 14:24:25 2013
    kjonca@poczta.onet.pl (Kamil Jońca) writes:

    Marcin Kocur <marcin2006@gmail.com.wytnij> writes:

    [...]

    File podpowiada czym się te pliki różni±:
    pngcrunch:
    PNG image data, 2321 x 3220, 8-bit grayscale, non-interlaced
    kolourpaint:
    PNG image data, 2321 x 3220, 8-bit colormap, non-interlaced

    Szukanie po colormap i grayscale nie zwraca nic ciekawego.

    Domy¶lam się, że kolourpaint robi kompresję stratn± i być może nie do
    końca zgodnie ze sztuk±, bo gdyby na tym obrazku były kolory, to

    Je¶li dobrze Cię zrozumiałem to po prostu
    convert -colors 255 in.png out.png
    KJ

    PS. Wydaje mi się, że z kolorami robi on co¶ takiego http://en.wikipedia.org/wiki/Indexed_color

    Hm. Już po wysłaniu zorientowałem sie, że jednak nie - nie wiem czemu,
    ale uparcie nie chce zmienić grayscale -> indexed. (Z obrazkami w RGB
    nie mam problemu). Dziwne.

    KJ

    --
    http://blogdebart.pl/2010/03/17/dalsze-przygody-swinki-w-new-jersey/
    Bilbo's First Law:
    You cannot count friends that are all packed up in barrels.

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: Telekomunikacja Polska (110:300/1.1@linuxnet)
  • From Stachu 'Dozzie' K.@110:300/1.1 to All on Sat Apr 13 21:46:42 2013
    On 2013-04-13, Marcin Kocur <marcin2006@gmail.com.wytnij> wrote:
    Hej,

    często robię skany dokumentów w skali szaro¶ci do formatu PNG. Okazuje
    się, że najlepiej z kompresj± takich obrazków radzi sobie kolourpaint. Wystarczy otworzyć i klikn±ć zapisz, różnica to zawsze ok. 50%.

    Próbowałem ten sam efekt osi±gn±ć przez convert:
    convert -quality 0 +dither -colors 256
    wraz z optipng -o7

    Trudno się dziwić, że dostajesz kiepskie rezultaty kompresji
    z ImageMagick, skoro ustawiasz najsłabszy wariant.

    http://www.imagemagick.org/script/command-line-options.php#quality

    --
    Secunia non olet.
    Stanislaw Klekot

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: solani.org (110:300/1.1@linuxnet)
  • From =?UTF-8?Q?S=C5=82awomir?= Szczyrba@110:300/1.1 to All on Mon Apr 15 12:14:30 2013
    Reply-To: steev@priv.onet.pl

    I błsynęły jaskrawym błękitem elektrony kre¶l±c zawiłe słowa
    pod którymi ognist± czerwieni± zapłon±ł podpis: Marcin Kocur
    Hej,

    często robię skany dokumentów w skali szaro¶ci do formatu PNG. Okazuje
    się, że najlepiej z kompresj± takich obrazków radzi sobie kolourpaint. Wystarczy otworzyć i klikn±ć zapisz, różnica to zawsze ok. 50%.

    Próbowałem ten sam efekt osi±gn±ć przez convert:
    convert -quality 0 +dither -colors 256

    Spr˘buj tak:

    convert image.png -quality 9 -type grayscale imagebw.png
    convert image.png -quality 9 -type palette -colorspace gray imagebw2.png


    Sławek
    --
    ________ Wychowali Cie sobie linuxiarze no i masz już psychikę zniekształcon±.
    _/ __/ __/ Pszemol
    \__ \__ \_______________________________________________________________
    /___/___/ Sławomir Szczyrba Arch

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: Baba Yaga Inc. (110:300/1.1@linuxnet)
  • From Marcin Kocur@110:300/1.1 to All on Fri Apr 19 14:19:06 2013
    Osoba Sławomir Szczyrba napisała na pl.comp.os.linux:

    convert image.png -quality 9 -type grayscale imagebw.png
    convert image.png -quality 9 -type palette -colorspace gray
    imagebw2.png


    Niestety, brak różnicy w rozmiarze.
    PNG image data, 2386 x 3401, 8-bit grayscale, non-interlaced

    --
    Pozdrawiam
    Marcin Kocur
    http://linux-porady.info - Linux od A do B :]

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: GTS Energis (110:300/1.1@linuxnet)
  • From Marcin Kocur@110:300/1.1 to All on Fri Apr 19 14:19:53 2013
    Osoba Stachu 'Dozzie' K. napisała na pl.comp.os.linux:

    Trudno się dziwić, że dostajesz kiepskie rezultaty kompresji
    z ImageMagick, skoro ustawiasz najsłabszy wariant.

    optipng akurat załatwia kompresję bezstratn± w moim przykładzie...

    --
    Pozdrawiam
    Marcin Kocur
    http://linux-porady.info - Linux od A do B :]

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: GTS Energis (110:300/1.1@linuxnet)
  • From Marcin Kocur@110:300/1.1 to All on Fri Apr 19 14:29:36 2013
    Osoba Kamil Jońca napisała na pl.comp.os.linux:

    Hm. Już po wysłaniu zorientowałem sie, że jednak nie - nie wiem czemu,
    ale uparcie nie chce zmienić grayscale -> indexed. (Z obrazkami w RGB
    nie mam problemu). Dziwne.

    Chyba nie. 8 bit grayscale to już jest indeksowane przecież?

    --
    Pozdrawiam
    Marcin Kocur
    http://linux-porady.info - Linux od A do B :]

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: GTS Energis (110:300/1.1@linuxnet)
  • From Baranek@110:300/1.1 to All on Fri Apr 19 19:38:08 2013
    Dnia Sat, 13 Apr 2013 11:41:43 +0200, Marcin Kocur napisał(a):

    Hej,

    często robię skany dokumentów w skali szaro¶ci do formatu PNG. Okazuje
    się, że najlepiej z kompresj± takich obrazków radzi sobie kolourpaint. Wystarczy otworzyć i klikn±ć zapisz, różnica to zawsze ok. 50%.

    Próbowałem ten sam efekt osi±gn±ć przez convert:
    convert -quality 0 +dither -colors 256
    wraz z optipng -o7

    Również pngcrunch nie pomaga:
    pngcrunch -rem gAMA -rem cHRM -rem iCCP -rem sRGB -rem alla -rem text
    Efekt: http://upload.koci.net.pl/uploads/pngcrunch_dickensgriffith_i_my_0002.png Kolourpaint:

    http://upload.koci.net.pl/uploads/kolourpaint_pngcrunch_dickensgriffith_i_my_00 02.png
    (1MB vs 500kB)

    File podpowiada czym się te pliki różni±:
    pngcrunch:
    PNG image data, 2321 x 3220, 8-bit grayscale, non-interlaced
    kolourpaint:
    PNG image data, 2321 x 3220, 8-bit colormap, non-interlaced

    Szukanie po colormap i grayscale nie zwraca nic ciekawego.

    Domy¶lam się, że kolourpaint robi kompresję stratn± i być może nie do
    końca zgodnie ze sztuk±, bo gdyby na tym obrazku były kolory, to
    wyszedłby brzydko. Pytanie brzmi jednak JAK osi±gn±ć to, co robi
    kolourpaint za pomoc± poleceń tekstowych (jak mam tych plików -dziesi±t,
    to mi się nie chce klikać).

    Oj poruta Panowie, poruta.
    Imagemagick w robocie, a nikt identify nie zatrudnił.
    Cała tajemnica wielko¶ci to liczba kolorów. Jak zej¶ć z 8 bitów do 4 to
    cudów ani kolourpainta już nie trzeba. Czyli "-type palette -colors 8" i gotowe.

    Pozdrawiam

    Baranek

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: ICP News Server (110:300/1.1@linuxnet)
  • From Marcin Kocur@110:300/1.1 to All on Fri Apr 19 20:33:29 2013
    Osoba Baranek napisała na pl.comp.os.linux:

    Cała tajemnica wielko¶ci to liczba kolorów. Jak zej¶ć z 8 bitów do 4
    to cudów ani kolourpainta już nie trzeba. Czyli "-type palette -colors
    8" i gotowe.

    Taak, to daje nawet lepsze wyniki jak kolourpaint :)
    Dziękuję.

    Czyli grayscale ma 8 bitów i st±d różnica? Hmm.

    BTW: Use -type optimize to ensure the image is written in the smallest possible file size.

    --
    Pozdrawiam
    Marcin Kocur
    http://linux-porady.info - Linux od A do B :]

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: GTS Energis (110:300/1.1@linuxnet)
  • From Marcin Kocur@110:300/1.1 to All on Fri Apr 19 22:54:52 2013
    My¶lę nad tymi kolorami w PNG i mam z tym problem. No bo tak:

    wiki:
    ===
    True color ? sposób wy¶wietlania barw na ekranie monitora o 24-bitowej
    głębi kolorów

    True color koduje każdy z kolorów podstawowych RGB (czerwony, zielony i niebieski) 8-bitowo, czyli dla każdego koloru jest 2^8 czyli 256
    poziomów jasno¶ci.
    ===

    Dobrze rozumiem, że 8 R * 8 G * 8 B = 24 bity RGB?

    pomoc imagemagick:
    ===
    -type Choose from: Bilevel, Grayscale, GrayscaleMatte, Palette, PaletteMatte, TrueColor, TrueColorMatte, ColorSeparation, or ColorSeparationMatte.
    ===

    No i dobra. Czyli przez -type definiuję głębię kolorów, KDE mi pokazuje
    głębia koloru 24, czyli ok, identify pokazuje tylko Type: TrueColor.

    Problem pojawia się z -depth:
    This the number of bits in a color sample within a pixel.

    Czyli co wła¶ciwie?

    convert -type truecolor -depth 4

    identify:
    Type: TrueColor
    Depth: 8/4-bit
    Channel depth:
    red: 4-bit
    green: 4-bit
    blue: 4-bit

    KDE: nadal głębia koloru 24. Bł±d? Przy zej¶ciu do depth 2 jest już
    tylko 8 (ale przecież 2^2 = 4).

    Dalej, pomoc imagemagick:
    ===
    -colors Set the preferred number of colors in the image.
    ===

    Teraz to już w ogóle jestem pogubiony. True color to jaka¶ paleta
    kontener, w której można zredukować liczbę bitów przypadaj±cych na kolor (-depth), a przez -colors można dodatkowo zredukować liczbę tych
    kolorów? Tak to mam rozumieć?

    To ile kolorów ma grayscale? Czyżby było to co¶ jak jeden kanał RGB 8
    bit˘w czyli 256 kolor˘w?

    A jak wpiszę:
    convert -type palette,
    to dostaję Depth: 8-bit, ale kolorów jest zauważalnie mniej, chyba 256.

    I dlaczego to się różni od:
    convert -type truecolor -depth 8?
    (2^8 = 256)
    Palette także nie składa się z 3 kanałów, a z jednego?

    A indeksowany obrazek to co za zwierz?

    I co mam my¶leć o wyniku identify: Colorspace: sRGB?

    Wybaczcie, że tyle pytań, ale może kto¶ to jest w stanie przystępnie wytłumaczyć ;p

    --
    Pozdrawiam
    Marcin Kocur
    http://linux-porady.info - Linux od A do B :]

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: GTS Energis (110:300/1.1@linuxnet)
  • From Baranek@110:300/1.1 to All on Sun Apr 21 01:33:15 2013
    Dnia Fri, 19 Apr 2013 22:54:52 +0200, Marcin Kocur napisał(a):

    [...]
    Sorry, trochę za dużo pytań. Zreszt± w więskzo¶ci do doczytania lub na inn± grupę.

    A indeksowany obrazek to co za zwierz?

    Jeżeli używasz niewielkiej liczby kolorów (np. logo w postaci różowego
    słonia w fioletowym kole z bladoniebieskim napisem, to plik będzie
    mniejszy, jak zdefiniujesz te cztery kolory (czwarty to tło) i piksele
    opiszesz 2 bitami wskazuj±cymi kolory na wybranej palecie.

    I co mam my¶leć o wyniku identify: Colorspace: sRGB?

    Hasło: przestrzeń kolorów.

    Wybaczcie, że tyle pytań, ale może kto¶ to jest w stanie przystępnie wytłumaczyć ;p

    Krótka wskazówka zamiast szczegółów: zapominasz, że Imagemagick
    przetwarzaj±c grafikę może wewnętrznie robić z ni± dowolne cuda
    przewidziane w programie (w tym dziwne głębie koloru), ale na końcu musi zapisać plik, który ma ograniczenia narzucone formatem.

    Pozdrawiam

    Baranek

    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: ICP News Server (110:300/1.1@linuxnet)
  • From Jan =?UTF-8?B?U3Rvxbxlaw==?=@110:300/1.1 to All on Sun Apr 21 15:28:08 2013
    Po głębokim namyśle Marcin Kocur napisał w piątek, 19 kwietnia 2013 22:54:

    True color ? sposób wyświetlania barw na ekranie monitora o
    24-bitowej głębi kolorów

    A takĹĽe przechowywania.

    True color koduje kaĹĽdy z kolorĂłw podstawowych RGB (czerwony,
    zielony i niebieski) 8-bitowo, czyli dla kaĹĽdego koloru jest 2^8
    czyli 256 poziomów jasności.
    ===

    Dobrze rozumiem, ĹĽe 8 R * 8 G * 8 B = 24 bity RGB?

    Prawie. Jeżeli liczysz bity, to będzie 8 R + 8 G + 8 B = 24
    bity RGB. A jeĹĽeli liczysz liczbÄ™ moĹĽliwych do przedstawienia kolorĂłw,
    to będzie 256R * 256G * 256B = od cholery dużo kolorów RGB. Nota bene,
    jest to ściema, bo ludzkie oko nie rozróżnia tylu odcieni. Ale to już
    jest _bardzo_ NTG. ;)

    Problem pojawia siÄ™ z -depth:
    This the number of bits in a color sample within a pixel.

    Czyli co właściwie?

    Czyli właśnie te 8 bitów na składową czyli 24 bity na piksel w przypadku TrueColor.

    convert -type truecolor -depth 4

    identify:
    Type: TrueColor
    Depth: 8/4-bit
    Channel depth:
    red: 4-bit
    green: 4-bit
    blue: 4-bit

    KDE: nadal głębia koloru 24. Błąd?

    Nie analizowałem specyfikacji PNG, ale na stronie http://en.wikipedia.org/wiki/Portable_Network_Graphics#Color_depth nie
    ma takiej kombinacji. MoĹĽe w pliku fizycznie jest 3x8 i tylko jest
    gdzieĹ› odnotowane, ĹĽe tylko 3x4 jest wykorzystywane. Nie wiem,
    zgadujÄ™. NTG. ;)

    Przy zejściu do depth 2 jest już
    tylko 8 (ale przecieĹĽ 2^2 = 4).

    A skąd Ci się wzięło 2^2?

    To ile kolorów ma grayscale? Czyżby było to coś jak jeden kanał RGB
    8 bit˘w czyli 256 kolor˘w?

    Zwykle tak jest - z tym, że nie 256 "kolorów", tylko "odcieni szarości". No i jeżeli plik jest "grayscale", to nie przechowuje się w
    nim wszystkich składowych, tylko jedną - bo wiadomo, że wszystkie trzy składowe mają być równe.

    A jak wpiszÄ™:
    convert -type palette,
    to dostajÄ™ Depth: 8-bit, ale kolorĂłw jest zauwaĹĽalnie mniej, chyba
    256.

    8 bitĂłw na piksel = 256 kolorĂłw, wszystko siÄ™ zgadza. ;)

    I dlaczego to się różni od:
    convert -type truecolor -depth 8?
    (2^8 = 256)
    Palette także nie składa się z 3 kanałów, a z jednego?

    Generalnie stosowane są dwa sposoby przechowywania obrazów kolorowych. W pierwszym każdemu pikselowi przyporządkowujesz słowo bezpośrednio opisujące jego kolor przy pomocy składowych (RGB +
    opcjonalnie alfa). Zaleta: możesz oddać tyle odcieni na obrazie, ile
    fabryka dała. Wada: obrazy wychodzą dość duże (1024x768 - to ponad 2
    MB, a wielkość rośnie proporcjonalnie do kwadratu długości podstawy obrazu). Sposób drugi: ponieważ często w obrazach (zwłaszcza grafiki komputerowej; ze zdjęciami i grafiką udającą zdjęcia zwykle nie jest
    tak dobrze) nie jest wykorzystywana tak wielka liczba kolorĂłw moĹĽna
    wybrać np. 256 kolorów wykorzystywanych na obrazie i zdefiniować je
    jako tzw. paletÄ™. Wtedy piksele obrazu opisujesz podajÄ…c tylko numery kolor˘w z palety (indeksy do tablicy kolor˘w). Zalety: tryb znacznie oszczÄ™dniejszy (1024 x 768 x 1 = 0,75 MB), zwĹ‚aszcza przy maĹ‚ej
    liczbie kolorów. Wady: na danym obrazie można reprezentować
    ograniczoną liczbę kolorów i do każdego obrazu trzeba dołączyć paletę wykorzystywanych barw (to się, oczywiście, dzieje automagicznie), a
    poza tym trudne do realizacji są przekształcenia obrazu (oprócz
    prostej podmiany kolorów, bo to jest trywialne dzięki palecie).

    I co mam myśleć o wyniku identify: Colorspace: sRGB?

    http://lmgtfy.com/?q=sRGB.

    Generalnie jest to jeden ze sposob˘w reprezentowania koloru w przestrzeni RGB, stosowany w grafice komputerowej (angielska wikipedia
    podaje 13 sposobĂłw reprezentacji RGB, poczÄ…wszy od ISO RGB, gdzie
    wartości składowych są liczbami rzeczywistymi, po CIE RGB z 1931 r. i dodatkowo CIE XYZ, gdzie Y jest luminancją a są X i Z składowymi abstrakcyjnymi - jest to bodaj jedyny system umożliwiający zakodowanie wszystkich możliwych odcieni).


    --
    Pozdrawiam, | Three switched witches watch 3 Swatch watch switches.
    | Which switched witch watch which Swatch watch switch?
    (js).

    PS. Odpowiadając bezpośrednio proszę usunąć minus wraz ze wszystkimi kolejnymi literami.


    --- MBSE BBS v0.95.15 (GNU/Linux-x86_64)
    * Origin: ATMAN - ATM S.A. (110:300/1.1@linuxnet)