Zkousel jsem neco najit, a jsou tam 3 parametry, strategy, filter a level (uroven komprese).
Pak jsem nasel, ze je mozne zadat parametr -quality XY, coz je divne pojmenovane protoze png je bezstratove, to cislo jsou dva parametry, s uplne jinym vyznamem nez u JPG (u JPG je to kvalita obrazku, cim vic, tim lip, ale vetsi soubor). Pro nejlepsi kompresi je parametr X=9, u parametru Y (podle vseho X je uroven komprese a Y je filtr) si nejsem jisty, podle toho, co jsem zkousel 0,2 a 5. Ale je to spis u kazdeho obrazku jinak.
Podle vseho lze zadat i 3 parametry -quality XYZ (X-level, Y-filter, Z-strategy), moc to ale nepomaha.
Mel by nekdo nejaky napad, jak zadat parametry co nejlepe ?
Kdyz chci snizit barevnou hloubku z 24 na 8 bitu, je lepsi jit prez GIF, nebo jen dat parametr -depth 8 . Nechci, aby byla pouzita dirhetace, jen se k urcite barve priradi jina a pouzije se paleta 256 barev (pro co nejmensi velikost). Jedna se o mapy, grafy, schemata, ne o fotky,scan nebo podobne.
Diky za napady, jestli to uz nekdo nekdy zkousel.
Pro každý obrázek se hodí jiné nastavení, takže než v convertu je dobré na výsledné png pustit něco jako pngcrush (apod. programy, je jich víc). Ty vyzkouší více metod komprese a uloží nejmenší výsledek.
Zkus výsledek ještě prohnat přes pngcrush (volitelně s parametrem -brute, když budeš mít dost CPU času).
Jinak u malých obrázků, například spritů, se konverze z true color do obrázku s osmibitovou paletou nemusí vyplatit, protože jen na uložení palety si to vezme zhruba 256*3+12 bajtů. Můžeš ale mít speciální případy s menší paletou, řekněme ikony, které někdo ručně nakreslil v 16/32/64 barvách. Potom je v pngcrush volba na zmenšení palety (kupodivu totiž hodně programů uloží všech 256 barev, i když se některé nepoužívají).
Dithering zhoršuje kompresi, takže to chce zase odzkoušet.
jo ještě maličkost - u malých obrázků (zase ikony) může vyjít GIF menší, ale je to většinou v jednotkách %. GIF má totiž úspornější uložení hlaviček jednotlivých chunků (například neřeší CRC), což se ale u větších obrázků vyrovná lepším kompresním algoritmem PNG a možností předfiltrace řádků.
Pokud jsou fakt ty zdrojové obrázky s pár barvama - tedy neprošlo to například přes JPEG :-) - tak zkus uložení do PNG + pngcrush (nebo jiný podobný tool).
na hodně různých souborech mi nejlíp fungovalo -quality 95, víc se tím convert zabývat nemá cenu, protože existuje více speciálních nástrojů
pngcrush - nebrat, pomalý a starý a existuje od něj odvozený novější optipng, který dělá transformace jen v paměti, takže rychleji http://optipng.sourceforge.net/ (http://optipng.sourceforge.net/)
maximální redukce (trvá dost dlouho, normálně stačí asi rychlejší -o5)
optipng -fix -silent -preserve -strip all -o7 -zm1-9 in.png out.png
no a pak je tu ještě zopfli, ten to často zkompresuje ještě víc, ale trvá dlouho https://github.com/google/zopfli (https://github.com/google/zopfli)
maximální redukce (jestli nechceš čekat dlouho tak vynech -m)
zopflipng -m --lossy_8bit --lossy_transparent -y out.png
jestli budeš dělat zopflipng, tak se krok s optipng asi může vypustit
zopfli ještě uměl advpng http://www.advancemame.it/doc-advpng.html (http://www.advancemame.it/doc-advpng.html)
ten ale neuměl paletované obrázky, tedy asi takové, co budeš mít
Citace od: trubicoid2 kdy 05. 11. 2017, 15:27:44
pngcrush - nebrat, pomalý a starý a existuje od něj odvozený novější optipng, který dělá transformace jen v paměti, takže rychleji http://optipng.sourceforge.net/ (http://optipng.sourceforge.net/)
záleží na nastaveních. PNGcrush je pomalejší (při -brute), protože prostě projde všech 140 (+-) možností, kdežto OptiPNG má nějakou heuristiku, co použít. Mě dával PNGcrush menší výsledné soubory právě u generovaných map s relativně velkými jednobarevnými plochami (poměrně malé "dlaždičky"). Taky jde laborovat s window size při komprimaci. Ještě víc pomohlo snížení počtu barev + redukce palety, ale to už záleží na vstupních datech.
Co tedy PNGcrush (OptiPNG netuším) neumí, je využití více jader, ale stejně jsem ho používal v dávkách pro stovky souborů, takže find+xargs to vlastně vyřešil :)
ale jinak souhlas s tím convertem - prostě je nejlepší si obrázky připravit do přesně takové podoby, jakou potřebuješ (ořez, paleta, textové chunky, !!!dobře nastavená gamma!!!) třeba i tím convertem, uložit do PNG a potom přechroustat toolem, který dělá jen a jen lossless optimalizace (pokud máš hodně CPU timu, tak použij všechny tři tooly a vyber si nejmenší soubory).
záleží asi na nastavení a na souboru, teď jsem zkusil pngcrush, optipng a zopflipng na https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/625px-NewTux.svg.png (https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/NewTux.svg/625px-NewTux.svg.png)
original: 95825
pngcrush -brute: 77912
optipng -fix -silent -preserve -strip all -o7 -zm1-9: 76954
zopflipng -m --lossy_8bit --lossy_transparent -y: 73303
a jsou teda všechny jednovláknové, takže ten xargs nebo parallel
Diky, to jsem ani nevedel, ze jsou na to tak specializovane nastroje. Je teda pravda, ze to pak trva mnohem dele, to i na rychlym CPU. Pouzivam vetsinou davkovou konverzi s 1k-1M souboru.
convert -qualiy 95 pouzivam, vetsinou to byl dobry vysledek, co je nejlepsi - zaviselo to na kazdem suboru, vetsinou byl convert o par bajtu horsi, nez xnwiev png komprese 9. Casto nehralo roli nastaveni 95, 92 nebo 90, ale 95 je vetsinou nejlepsi.
optipng -fix -silent -preserve -strip all -o7 -zm1-9
Hazi chybu:
** Error: Lossy operations are not currently supported
Funguje to bez vynechani parametru -strip. Chvilku si clovek pocka, da to lepsi vysledek, nez convert -quality 95
Dirhetace podstatne zvysi clenitost barev u jinak jednobarevnych ploch, coz muze byt i vetsi velikost nez u barevne hloubky 24 bit. A taky to uz vypada hur casto.
Jedna mapa 8 bit hloubky:
convert -quality 95 or 92 or 90 --- 251 235 B cca 4 s cas
optipng -fix -silent -preserve all -o7 -zm1-9 --- 251 151 B cca 7 minut cas
pngcrush -brute --- 251 151 B cas 66.4 s
zopflipng: command not found (zopfli je nainstalovany, mozna stara verze)
Jeden z typu obrazku, na ktere to pouzivam
http://meteotommy.twilightsparkle.cz/OBR/tutiempo_gsod/Czech_Slovakia/LIBUS-PRAHA_115200/GRAPH_TEMP_Lines/
Vetsi mapy (lepsi zachovat 24 bit barvy)
http://meteotommy.twilightsparkle.cz/OBR/Venus_Topography/
Nebo mapy
http://meteotommy.twilightsparkle.cz/OBR/TEST/OneTimeWeather0050122000_MAP_Classic_MOLA_TEMP.png
Dost napadu jsem nasel i tady:
https://stackoverflow.com/questions/27267073/imagemagick-lossless-max-compression-for-png
TomasTom: K optimalizaci těch grafů by mj. pomohlo, nedělat u popisků antialiasing.
Citace od: P_V kdy 05. 11. 2017, 20:42:33
TomasTom: K optimalizaci těch grafů by mj. pomohlo, nedělat u popisků antialiasing.
Kde presne a co mas namysli ? Jen u jednoduhych grafu, nebo u map ?
Zmenit pismo u os ? Grafy delam v Gnuplotu, nastavil jsem jen font a typ cisla datum na vodorovne ose.