lørdag, januar 23, 2021

Pngbest.bat

Daily Rush Debat Programmering Pngbest.bat

  • Dette indlæg indeholder 24 kommentarer, har 16 deltagere og blev senest opdateret af  Anonym for 6 år, 3 måneder siden.
  • Forfatter
    Emne
  • #0

    Sven_Bent
    Bruger
    25.996 indlæg
    Offline

    Jeg ville lige dele frugten at mit batch roderi

    Dette er en PNG optimiserings scripts der kore multithreaded og med valgbar styrke

    PNGbest Fil.png

    Styrken er optinalt og uden en vardi defaulter den til 15 for et stadie og 0 for et andet.

    et andet ret smukt punkt er at den skippe den mest langsomme part hvis den selv finder ud af det nok ikke vil hjaelpe

    Foelgende filer skal bruges til batchen

    PNGwolf (zopfli versionen)
    PNGout
    Huffmix
    Deflopt
    Defluff

    @echo OFF
    set strenght=%2
    if “%2″==”” set strenght=15
    set RandIt=0
    set /a RandIt=(%2/%NUMBER_OF_PROCESSORS%)
    set /a TotalIt=%RandIt%”*%NUMBER_OF_PROCESSORS%

    ECHO — SvenBent’s PNGbest is optimizing your PNG file
    ECHO CPU threads: %NUMBER_OF_PROCESSORS%
    ECHO Zopfli compression strenght: %strenght%
    ECHO Random initial tables : %TotalIt%
    if “%3″==”brutal” ECHO Extended brute force: Enabled (not supported)
    if “%3″==”mixing” ECHO Mixing only mode: Enabled
    if “%3″==”pal” ECHO Expanding palette size: Enabled (use for less than 8bits pallette images)
    ECHO File: %1
    ECHO Size: %~z1

    if “%3″==”mixing” Goto Mixing

    ECHO — PNGwolf-Zopfli —
    pngwolf –in=%1 –out=%1 –zopfli-iterations=%strenght%

    set wolfsize=%~z1

    ECHO — Finding optimal filter —
    for %%f in (6,0,1,2,3,4,5) do pngout %1 /f%%f /d0
    if “%3″==”pal” for %%f in (6,0,1,2,3,4,5) do pngout %1 /f%%f /d8

    ECHO — Block split threshold —
    for %%b in (64,96,128,192,384,512,768,1024,1536,2048,3072,4096,8192,16384,0) do pngout %1 /f6 /b%%b

    if “%~z1″==”%wolfsize%” goto norandom
    if “%2″==”” goto norandom

    :Mixing
    ECHO — Random initial tables and mixing blocks —

    echo @echo OFF >%1.pngmix.bat
    echo for /l %%%%r in (1,1,%RandIt%) do ( >>%1.pngmix.bat
    echo ECHO — Trial: %%%%r of %RandIt% — >>%1.pngmix.bat
    echo pngout %1.thread.%%1.png %1.tmp.%%1.png /r /force /f6 /kp >>%1.pngmix.bat
    echo Deflopt /b /s %1.tmp.%%1.png >>%1.pngmix.bat
    echo huffmix %1.thread.%%1.png %1.tmp.%%1.png %1.thread.%%1.png >>%1.pngmix.bat
    echo del %1.tmp.%%1.png >>%1.pngmix.bat
    echo ) >>%1.pngmix.bat
    echo del %1.%%1.tag >>%1.pngmix.bat
    echo exit >>%1.pngmix.bat

    for /l %%t in (1,1,%NUMBER_OF_PROCESSORS%) do (
    Copy %1 %1.thread.%%t.png
    echo tag > %1.%%t.tag
    start “Thread%%t” %1.PNGmix.bat %%t
    )

    ECHO Waiting for threads to close
    :keepwait
    timeout 1 >nul
    if exist %1.?.tag goto keepwait
    if exist %1.??.tag goto keepwait
    if exist %1.???.tag goto keepwait
    if exist %1.????.tag goto keepwait

    ECHO — Final mixing stage —
    for /l %%t in (1,1,%NUMBER_OF_PROCESSORS%) do (
    huffmix %1 %1.thread.%%t.png %1
    del %1.thread.%%t.png
    )
    del %1.pngmix.bat

    :norandom

    ECHO — Optimizing deflate structure —
    deflopt /b %1
    defluff < %1 >%1.fluff.png
    deflopt /b %1.fluff.png
    huffmix %1 %1.fluff.png %1
    deflopt /b %1
    del %1.fluff.png

    Sven Bent - Dr. Diagnostic
    www.TechCenter.DK

Viser 15 kommentarer - 1 til 15 (af 24 i alt)
  • Forfatter
    Kommentarer
  • #1

    FIRESTORM
    Bruger
    5.349 indlæg
    Offline

    Det er på grænsen til det stupide at du stadig holder fast i batch scripting.

    Hvad er brugs scenariet af dit script? Hvornår er det man har pnger der har brug for ekstra optimering? Vil input ikke typisk være noget andet?

    #2

    Sven_Bent
    Bruger
    25.996 indlæg
    Offline

    #1
    helt enig men det er sjovt at see hvor meget der kan vrides ud a batch som det slet ikke var ment til at goere.

    jeg har lovet mig selv at tage et powershell kursus men lige pt forcusere jeg pat at komme tilbage i IT branchens

    mht til png optimering kommer komme det jo an pa hvem man spoerger.

    jeg vil sige ALTID. men det er lidt som at spoerge hvorfor bygger vi bugatti veyron til at koere si usandsynligt staerkt naar vi alligevel ikke rigtig kan bruge det til noget.

    jeg goer det mest for at prove graenser af.

    jeg koere selv script med 99 i styrke pa alle png filer jeg laver og 999 hvis det skal staa natten over og optimere en fil.

    det kan vare brugbart for folk der laver ting til smaa embeded enheder hvor hvor byte stadigvaek taeller.

    men generelt set kan du opnaar et paent boost ved at optimering komprimering hist og her.

    fkes. 10-13% bedre ydelse paa dailyrush ved at optimere jpg filler og det tage ca 1 sek at goere det

    Komprimering er ikke om at goere ting mindre men om at øges effektivitet.

    hvis du kan lave noget bedre 1gang og hoeste gevist tusingvis af gange hvorfor saa ikke gore det ordenligt fra starten af ?

    Sven Bent - Dr. Diagnostic
    www.TechCenter.DK

    #3

    Sven_Bent
    Bruger
    25.996 indlæg
    Offline

    lige side info

    da jeg skulle valerge imellem hvilken metode at bruge til random trials og mixing stadiet.
    saa tog de lidt over 64 timer at komprimere filer i mit test sets.

    gevinst fra den ene metode til den anden var 3kbytes i fofhold til den anded.
    paa et ca 236mb data set.

    Saa ja det kan scalere op til et helt stupidt niveau

    Sven Bent - Dr. Diagnostic
    www.TechCenter.DK

    #4

    hausner
    Moderator
    17.185 indlæg
    Offline

    #2
    Generelt set er Det selvfølgelig fedt at du deler af dine erfaringer frivilligt og uden opfordring. Men jeg er bange for at din hobby er så speciel at du ikke finder nogen ligesindede på DR

    Planter er fascinerende

    #5

    aloC
    Moderator
    9.059 indlæg
    Offline

    Tror bare jeg fortsætter med Save For Web i Photoshop og lægger mine kræfter andetsteds

    "I am Guybrush Threepwood and i wanna be a pirate!"

    #6

    Pacemaker_DK
    Bruger
    1.319 indlæg
    Offline

    Så det er basalt set et optimeret batch-script til at ændre kompressionsniveauet i en PNG-fil?

    Meget frækt og nyttigt i nogen (ret specifikke) problemstillinger.

    Troede faktisk at png brugte noget lidt mere advanceret end Huffman kodning (selvom det ikke er den eneste teknik kodekset benytter).

    #7

    OnePostOnly
    Bruger
    4.964 indlæg
    Offline

    Hvordan har SB nogensinde fået en .bat til at virke med den ristede måde han skriver på.

    "Hummerbestanden i de vestlige farvande har lidt et grumt nederlag som følge af min svaghed for deres überfråderen kød" - Ukendt dansker i Caribien.

    #8

    Anonym 11.724 indlæg
    Offline

    #7 haha jeg tænkte lidt det samme…. må være en kode autocorrect ;D

    #9

    ozzie
    Bruger
    1.628 indlæg
    Offline

    #7 Jeg indstiller dig hermed til den sjoveste kommentar på DR i år! Jeg stemmer i hvert fald på dig!

    #10

    hausner
    Moderator
    17.185 indlæg
    Offline

    Det kunne være han skulle til at prefixe sine kommentarer på DR med “ECHO”. Det ser ud til det fixer hans stave/taste-problemer

    Planter er fascinerende

    #11

    Kolben
    Bruger
    18.939 indlæg
    Offline

    #10
    Nej, de bliver bare konsekvente: “strenght”

    P=NP?

    #12

    Sven_Bent
    Bruger
    25.996 indlæg
    Offline

    #1
    png bruger deflate som vist nok er lz77 +huffman.
    LZ77 er et dictionary basered komprimering dvs dne reducer redundans af tegnkombinationer.
    hvor huffman optimer bit distributione til tegnene

    Det er samme komprimering metode som i zip filer

    dertil ligger png dog nogle delta filtrer

    baade zoplif og pngout er mere grundcode comprering et standra deflate men som er kompatibel med deflate. de laver typisk mindre filer men som viker helt 100% med enhver deflate dekoder.

    min batch filer afprover forskllgie delta filtrer blok tressholdds og mange andre smaa tips til at presse hver sidste bit ud af filen.

    lidt mer om huffman
    der findes nogle bedre metoder end huffman som bit codning bla Arithmetic Coding og range codning. som saa hvidt ejeg forstaar bruger en mere fine opdeling and huffman. og kan derfor optimere lidt bedre.

    huffman har bare den fordel at den ikke er patent laast

    Sven Bent - Dr. Diagnostic
    www.TechCenter.DK

    #13

    Sven_Bent
    Bruger
    25.996 indlæg
    Offline

    Saa er der sgisme lige en update

    tweak haandtering af pngout filtre/block threshold

    Block threshold stadiet er nu multithreades (kun 2 threads dog)

    tweaket auto skip delen en bitte smule
    nu skipepr den ikek vis pngout og pngwolf er lige storre

    de to smaa tweak gore ikke den store forskelle er er kun en forsklle i utroligt smaa tilfaelde (er ikke stodt paa dem)
    men kunen lige saa godt rette det

    den storre aendring er mere multithreading for mere hastighed

    Har ikke rettet strenght staveboeffen

    @echo OFF
    set strenght=%2
    if “%2″==”” set strenght=15
    set RandIt=0
    set /a RandIt=(%2/%NUMBER_OF_PROCESSORS%)
    set /a TotalIt=%RandIt%”*%NUMBER_OF_PROCESSORS%

    ECHO — SvenBent’s PNGbest is optimizing your PNG file
    ECHO CPU threads: %NUMBER_OF_PROCESSORS%
    ECHO Zopfli compression strenght: %strenght%
    ECHO Random initial tables : %TotalIt%
    if “%3″==”brutal” ECHO Extended brute force: Enabled (not supported)
    if “%3″==”mixing” ECHO Mixing only mode: Enabled
    if “%3″==”pal” ECHO Expanding palette size: Enabled (use for less than 8bits pallette images)
    ECHO File: %1
    ECHO Size: %~z1

    if “%3″==”mixing” Goto Mixing

    ECHO — PNGwolf-Zopfli —
    pngwolf –in=%1 –out=%1 –zopfli-iterations=%strenght%

    set wolfsize=%~z1

    @echo off

    ECHO — Finding optimal filter for PNGout —
    Pngout %1 %1.out.png /f6 /force
    for %%f in (6,0,1,2,3,4,5) do pngout %1.out.png /f%%f /d0
    if “%3″==”pal” for %%f in (6,0,1,2,3,4,5) do pngout %1.out.png /f%%f /d8

    ECHO — Block split threshold —

    Copy %1.out.png %1.split1.png
    echo > %1.Split1.tag
    echo @echo off > %1.Split1.bat
    echo for %%%%b in (64,96,128,192,384,512,768) do pngout %1.split1.png /f6 /b%%%%b >> %1.Split1.bat
    echo del %1.Split1.tag >> %1.Split1.bat
    echo exit >> %1.Split1.bat

    Copy %1.out.png %1.split2.png
    echo > %1.Split2.tag
    echo @echo off > %1.Split2.bat
    echo for %%%%b in (1024,1536,2048,3072,4096,8192,16384,0) do pngout %1.split2.png /f6 /b%%%%b >> %1.Split2.bat
    echo del %1.Split2.tag >> %1.Split2.bat
    echo exit >> %1.Split2.bat

    start %1.Split1.bat
    start %1.Split2.bat

    echo Waiting for threads to close
    :splitwait
    Timeout 1 >nul
    if exist %1.Split?.tag goto splitwait
    del %1.Split?.bat

    huffmix %1.out.png %1.split1.png %1.out.png
    huffmix %1.out.png %1.split2.png %1.out.png
    del %1.split1.png
    del %1.split2.png

    Echo — Comparing PNGwolf vs PNGout —
    echo @echo off > %1.chksmll.bat
    echo if %%~z1 LSS %%~z2 Del %%2 >>%1.chksmll.bat
    echo if %%~z1 GEQ %%~z2 Del %%1 >>%1.chksmll.bat
    echo if exist %%2 ren %%2 %%1 >>%1.chksmll.bat
    echo exit >>%1.chksmll.bat

    start /wait %1.chksmll.bat %1 %1.out.png
    del %1.chksmll.bat

    if %~z1 GTR %wolfsize% goto norandom
    if “%2″==”” goto norandom

    :Mixing
    ECHO — Random initial tables and mixing blocks —

    echo @echo OFF >%1.pngmix.bat
    echo for /l %%%%r in (1,1,%RandIt%) do ( >>%1.pngmix.bat
    echo ECHO — Trial: %%%%r of %RandIt% — >>%1.pngmix.bat
    echo pngout %1.thread.%%1.png %1.tmp.%%1.png /r /force /f6 /kp >>%1.pngmix.bat
    echo Deflopt /b /s %1.tmp.%%1.png >>%1.pngmix.bat
    echo huffmix %1.thread.%%1.png %1.tmp.%%1.png %1.thread.%%1.png >>%1.pngmix.bat
    echo del %1.tmp.%%1.png >>%1.pngmix.bat
    echo ) >>%1.pngmix.bat
    echo del %1.%%1.tag >>%1.pngmix.bat
    echo exit >>%1.pngmix.bat

    for /l %%t in (1,1,%NUMBER_OF_PROCESSORS%) do (
    Copy %1 %1.thread.%%t.png
    echo tag > %1.%%t.tag
    start “Thread%%t” %1.PNGmix.bat %%t
    )

    ECHO Waiting for threads to close
    :keepwait
    timeout 1 >nul
    if exist %1.?.tag goto keepwait
    if exist %1.??.tag goto keepwait
    if exist %1.???.tag goto keepwait
    if exist %1.????.tag goto keepwait

    ECHO — Final mixing stage —
    for /l %%t in (1,1,%NUMBER_OF_PROCESSORS%) do (
    huffmix %1 %1.thread.%%t.png %1
    del %1.thread.%%t.png
    )
    del %1.pngmix.bat

    :norandom

    ECHO — Optimizing deflate structure —
    deflopt /b %1
    defluff < %1 >%1.fluff.png
    deflopt /b %1.fluff.png
    huffmix %1 %1.fluff.png %1
    deflopt /b %1
    del %1.fluff.png

    Sven Bent - Dr. Diagnostic
    www.TechCenter.DK

    #14

    Radiohead
    Bruger
    2.927 indlæg
    Offline

    Du burde bruge din tid mere fornuftigt.

    Vil man dø af kedsomhed eller af at spise sorte pølser?

    #15

    Tequilashot
    Bruger
    4.834 indlæg
    Offline

    #14 definere at bruge tid på noget fornuftigt?
    Er det at blive berømt eller at få flest børn eller tjene kassen som en olie sjeik ?

    Den første pc jeg havde var en 386sx med 8 mb ram som jeg gamede warcraft 1 på i dos 5.

Viser 15 kommentarer - 1 til 15 (af 24 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.