å¥ã®ãŠãŒã¶ãŒã¯ãæ°ããããŒã¿ãããŒã ãã©ã€ãã«æžã蟌ã¿ãããšèããŠããŸããããããå®è¡ããã®ã«ååãªç©ºã容éããããŸããã ãŸããããã¹ãŠãéåžžã«éèŠã§å¿ èŠãªãã®ããªã®ã§ãäœãåé€ããããããŸããã ãããŠãããã©ãããã°ããã®ã§ããããïŒ
ãã®åé¡ãæ±ããŠãã人ã¯ããŸããã ç§ãã¡ã®ããŒããã©ã€ãã«ã¯ãã©ãã€ãåäœã®æ å ±ãããããã®éã¯æžå°ããåŸåããããŸããã ããããããã¯ã©ãã»ã©ãŠããŒã¯ãªã®ã§ããããïŒ çµå±ã®ãšããããã¹ãŠã®ãã¡ã€ã«ã¯ç¹å®ã®é·ãã®ãããã®ã»ããã«ãããããããããæ°ãããã¡ã€ã«ã¯ãã§ã«ä¿åãããŠãããã¡ã€ã«ãšããã»ã©å€ãããŸããã
ããŒã ãã©ã€ãã«æ¢ã«ä¿åãããŠããæ å ±ãæ€çŽ¢ããããšã¯ã倱æã§ã¯ãªãã«ããŠããå°ãªããšãå¹ççãªäœæ¥ã§ã¯ãªãããšã¯æããã§ãã éã«ãå·®ãå°ããå Žåã¯ãå°ã調æŽããããšãã§ããŸã...
TL;DR - JPEG ãã¡ã€ã«ã䜿çšããŠããŒã¿ãæé©åããå¥åŠãªæ¹æ³ã«ã€ããŠèª¬æãã XNUMX åç®ã®è©Šã¿ã§ããããããããã圢åŒã«ãªããŸããã
ããããšéãã«ã€ããŠ
å®å šã«ã©ã³ãã 㪠00 ã€ã®ããŒã¿ãååŸããå Žåãå¹³åããŠããããã«å«ãŸãããããã®ååãäžèŽããŸãã å®éãåã㢠('01ã10ã11ãXNUMX') ã®å¯èœãªã¬ã€ã¢ãŠãã®ãã¡ãã¡ããã©ååãåãå€ãæã¡ãããã§ã¯ãã¹ãŠãåçŽã§ãã
ãããããã¡ãããXNUMX ã€ã®ãã¡ã€ã«ãåãåºã㊠XNUMX ã€ã XNUMX çªç®ã®ãã¡ã€ã«ã«åœãŠã¯ãããšããã®ãã¡ã® XNUMX ã€ã倱ãããŸãã å€æŽãä¿åããã°ãåã«åçºæããã ãã§ã
ã§ã¯ãäœãšäœã®éã§å·®ããªããããšãã§ããã®ã§ããããïŒ ã€ãŸãããŠãŒã¶ãŒãæžã蟌ãã æ°ãããã¡ã€ã«ã¯åãªããããã®ã·ãŒã±ã³ã¹ã§ãããããèªäœã§ã¯äœãå®è¡ã§ããŸããã 次ã«ãå·®åãä¿åããã«å€æŽã§ããããããããŒããã©ã€ãäžã§èŠã€ããã°ãé倧ãªçµæãæãããšãªãçŽå€±ããŠãçãæ®ãããšãã§ããŸãã ãããŠãFS äžã®ãã¡ã€ã«èªäœãå€æŽããã ãã§ãªãããã®äžã«ããæ©å¯æ§ã®äœãæ å ±ãå€æŽããããšã¯çã«ããªã£ãŠããŸãã ããããã©ããã©ã®ããã«ããŠïŒ
ãã£ããã£ã³ã°æ¹æ³
éå¯éå§çž®ãã¡ã€ã«ã圹ã«ç«ã¡ãŸãã ããããã¹ãŠã® JPEGãMP3 ãªã©ã¯éå¯éå§çž®ã§ã¯ãããŸãããå®å
šã«å€æŽã§ãããããã倧éã«å«ãŸããŠããŸãã ãšã³ã³ãŒãã®ããŸããŸãªæ®µéã§ãã³ã³ããŒãã³ããæ°ã¥ãããªããã¡ã«å€æŽããé«åºŠãªæè¡ã䜿çšããããšãå¯èœã§ãã åŸ
ã£ãŠã é«åºŠãªãã¯ããã¯... ç®ã«èŠããªãå€æŽ... å°ããã€å¥ã®ãã®ã«... ããã¯ã»ãšãã©ã®ããã§ã
å®éãããæ å ±ãå¥ã®æ å ±ã«åã蟌ããšããææ³ã¯ãä»ã«é¡ãèŠãªã圌女ã®ææ³ã圷圿ãšãããŸãã ãŸããç§ã¯äººéã®æèŠã«å ããããå€åãç¥èŠã§ããªãããšã«ãæéãåããŸããã ãã¹ãã©ãã§åå²ãããã¯ç§å¯ã§ããç§ãã¡ã®ä»äºã¯ããŠãŒã¶ãŒãããŒã ãã©ã€ãã«è¿œå æ å ±ãå ¥åããããšã«ãªããŸãããããã¯ãŠãŒã¶ãŒã«å®³ãåãŒãã ãã§ãã 圌ã¯ãŸãå¿ããŠããŸãã ããã
ãããã£ãŠã䜿çšããããšã¯ã§ããŸãããããã€ãã®å€æŽãå ããå¿ èŠããããŸãã 次ã«ãæ¢åã®æ¹æ³ã® XNUMX ã€ãšäžè¬çãªãã¡ã€ã«åœ¢åŒã®äŸã䜿çšããŠèª¬æãã瀺ããŸãã
ãžã£ãã«ã«ã«ã€ããŠ
æ¬åœã«çµããšãäžçã§æãå§çž®ãããããã®ã«ãªããŸãã ãã¡ãããJPEG ãã¡ã€ã«ã«ã€ããŠè©±ããŠããŸãã ããŒã¿ãåã蟌ãããã®ããŒã«ãæ¢åã®æ¹æ³ãããããããã ãã§ãªããããã¯å°çäžã§æã人æ°ã®ããã°ã©ãã£ãã¯åœ¢åŒã§ãã
ãã ããç¬ã®ç¹æ®ã«åŸäºããªãããã«ã¯ããã®åœ¢åŒã®ãã¡ã€ã«ã§ã®æŽ»ååéãå¶éããå¿
èŠããããŸãã éå°ãªå§çž®ã«ãã£ãŠè¡šç€ºãããçœé»ã®åè§åœ¢ã奜ã人ã¯ããªãããããã§ã«å§çž®ããããã¡ã€ã«ã䜿çšããããã«å¶éããå¿
èŠããããŸãã åã³ãŒãã£ã³ã°ã®åé¿ã ããå
·äœçã«ã¯ãããŒã¿æ倱ã®åå ãšãªãæäœ (DCT ãšéåå) ã®åŸã«æ®ãæŽæ°ä¿æ°ã䜿çšããŸããããã¯ããšã³ã³ãŒã ã¹ããŒã ã§å®å
šã«è¡šç€ºãããŸã (ããŠãã³åœç«å³æžé€šã® wiki ã®ãããã§)ã
jpeg ãã¡ã€ã«ãæé©åããã«ã¯ãããŸããŸãªæ¹æ³ãèããããŸãã ãã¹ã¬ã¹æé©åïŒjpegtranïŒãããæé©åããã
F5
ã¢ã«ãŽãªãºã ã®ãã¡ããªãŒå
šäœããããã®æ¡ä»¶ã«é©åãããããããç解ããŠããããšãã§ããŸãã
å€æŽèªäœã¯ãèŠçŽãããšãç¹å®ã®æ¡ä»¶äž (ã€ãŸããåžžã«ã§ã¯ãããŸãã) ã§ä¿æ°ã®çµ¶å¯Ÿå€ã 5 æžããããšã§ãããFXNUMX ããŒã䜿çšããŠããŒã ãã©ã€ãäžã®ããŒã¿ ã¹ãã¬ãŒãžãæé©åã§ããããã«ãªããŸãã éèŠãªã®ã¯ãJPEG ã®å€ã®çµ±èšçååžã«ããããã®ãããªå€æŽåŸã®ä¿æ°ããããã³ ãšã³ã³ãŒãåŸã«å æããããããå°ãªããªãå¯èœæ§ãé«ããRLE ã䜿çšããŠãšã³ã³ãŒããããšãã«æ°ãããŒããã²ã€ã³ãäžãããšããããšã§ãã
å¿ èŠãªå€æŽã¯ãèŠããã«ãæ©å¯æ§ãæ ãéšå (ãã¹ã¯ãŒãã®åé 眮) ãåé€ããŠãªãœãŒã¹ãšå®è¡æéãç¯çŽããäžåºŠã« XNUMX ã€ãã€ã§ã¯ãªãå€æ°ã®ãã¡ã€ã«ãæäœããããã®ã¡ã«ããºã ãè¿œå ããããšã§ãã èªè ã¯å€æŽããã»ã¹ã®è©³çŽ°ã«ã¯èå³ããªããšæãããã®ã§ãå®è£ ã®èª¬æã«ç§»ããŸãããã
ãã€ãã¯
ãã®ã¢ãããŒããã©ã®ããã«æ©èœããããå®èšŒããããã«ããã®ã¡ãœãããçŽç²ãª C ã§å®è£
ããå®è¡é床ãšã¡ã¢ãªã®äž¡æ¹ã®ç¹ã§å€ãã®æé©åãå®è¡ããŸãã (DCT ã䜿çšããåã§ãã£ãŠããå§çž®ãªãã§ãããã®ç»åã®éããã©ãã»ã©ã«ãªããæ³åããããšãã§ããŸãã)ã ã©ã€ãã©ãªãçµã¿åãããŠã¯ãã¹ãã©ãããã©ãŒã ãå®çŸ
ãã®å®è£ ã¯ãã³ã³ãœãŒã« ãŠãŒãã£ãªãã£ããã³ã©ã€ãã©ãªã®åœ¢åŒã§å©çšã§ããŸãã èå³ã®ããæ¹ã¯ãGithub ã®ãªããžããªã«ãã Readme ã§åŸè ã®äœ¿çšæ¹æ³ã®è©³çŽ°ã確èªããŠãã ããããã®ãªã³ã¯ãžã®ãªã³ã¯ã¯æçš¿ã®æåŸã«æ·»ä»ããŸãã
ã©ã®ããã«äœ¿çšããïŒ
æ°ãã€ããŠã ããã±ãŒãžåã«äœ¿çšãããã€ã¡ãŒãžã¯ãæå®ãããã«ãŒã ãã£ã¬ã¯ããªã§æ£èŠè¡šçŸã䜿çšããŠæ€çŽ¢ããããšã«ãã£ãŠéžæãããŸãã å®äºãããšããã¡ã€ã«ã¯ãã®å¢çå ã§èªç±ã«ç§»åãååå€æŽãã³ããŒãããããã¡ã€ã«ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãå€æŽãããããããšãã§ããŸãããã ãã现å¿ã®æ³šæãæã£ãŠãçŽæ¥ã®å 容ã決ããŠå€æŽããªãã§ãã ããã XNUMX ãããã§ãå€ã倱ããããšãæ å ±ã埩å ã§ããªããªãå¯èœæ§ããããŸãã
å®äºãããšããŠãŒãã£ãªãã£ã¯ã䜿çšãããã€ã¡ãŒãžã«é¢ããããŒã¿ãªã©ã解åã«å¿ èŠãªãã¹ãŠã®æ å ±ãå«ãç¹å¥ãªã¢ãŒã«ã€ã ãã¡ã€ã«ãæ®ããŸãã ããèªäœã®éãã¯çŽæ°ãããã€ãã§ãå æããããã£ã¹ã¯é åã«é倧ãªåœ±é¿ãäžããããšã¯ãããŸããã
ã-aããã©ã°ã./f5ar -a [æ€çŽ¢ãã©ã«ããŒ] [Perl äºæã®æ£èŠè¡šçŸ]ãã䜿çšããŠãå¯èœãªå®¹éãåæã§ããŸãã ãããã³ã°ã¯ã³ãã³ãã./f5ar -p [æ€çŽ¢ãã©ã«ããŒ] [Perl äºæã®æ£èŠè¡šçŸ] [ããã¯ããããã¡ã€ã«] [ã¢ãŒã«ã€ãå]ãã§è¡ãããã¢ã³ããã¯ã¯ã./f5ar -u [ã¢ãŒã«ã€ã ãã¡ã€ã«] [埩å ããããã¡ã€ã«å]ãã§è¡ãããŸãã ]' ã
ä»äºã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³
ãã®æ¹æ³ã®æå¹æ§ã瀺ãããã«ããã®ãµãŒãã¹ããå®å
šç¡æã®ç¬ã®åç 225 æã®ã³ã¬ã¯ã·ã§ã³ãã¢ããããŒãããŸããã
ã·ãŒã±ã³ã¹ã¯éåžžã«ç°¡åã§ãã
$ du -sh knuth.pdf dogs/
44M knuth.pdf
633M dogs/
$ ./f5ar -p dogs/ .*jpg knuth.pdf dogs.f5ar
Reading compressing file... ok
Initializing the archive... ok
Analysing library capacity... done in 17.0s
Detected somewhat guaranteed capacity of 48439359 bytes
Detected possible capacity of upto 102618787 bytes
Compressing... done in 39.4s
Saving the archive... ok
$ ./f5ar -u dogs/dogs.f5ar knuth_unpacked.pdf
Initializing the archive... ok
Reading the archive file... ok
Filling the archive with files... done in 1.4s
Decompressing... done in 21.0s
Writing extracted data... ok
$ sha1sum knuth.pdf knuth_unpacked.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth.pdf
5bd1f496d2e45e382f33959eae5ab15da12cd666 knuth_unpacked.pdf
$ du -sh dogs/
551M dogs/
ãã¡ã³åãã®ã¹ã¯ãªãŒã³ã·ã§ãã
解åããããã¡ã€ã«ã¯åŒãç¶ãèªã¿åãããšãã§ããŸãã
ã芧ã®ãšãããããŒããã©ã€ãäžã®å ã®ããŒã¿ 633 + 36 == 669 ã¡ã¬ãã€ããããããå¿«é©ãª 551 ã«å°éããŸããããã®ãããªæ ¹æ¬çãªéãã¯ãä¿æ°ã®å€ã®æžå°ã«ãã£ãŠèª¬æãããä¿æ°ã®å€ã«åœ±é¿ãäžããŸãããã®åŸã®å¯éå§çž®: XNUMX ã€ãã€æžãããšãæçµãã¡ã€ã«ããæ°ãã€ããç°¡åã«åãåãããšãã§ããŸãã ãã ããéåžžã«å°ãããšã¯ãããããã¯ããŒã¿æ倱ã§ããããšã«å€ããã¯ãªããææ ¢ããå¿ èŠããããŸãã
幞ããªããšã«ããããã¯ç®ã«ã¯ãŸã£ããèŠããŸããã ã¹ãã€ã©ãŒã®äžã§ã¯ (habrastorage ã¯å€§ããªãã¡ã€ã«ãåŠçã§ããªããã)ãèªè
ã¯ãå
ã®ã³ã³ããŒãã³ãããå€æŽãããã³ã³ããŒãã³ãã®å€ãæžç®ããããšã«ãã£ãŠåŸããããç®ãšãã®åŒ·åºŠã®äž¡æ¹ã§éããè©äŸ¡ã§ããŸãã
代ããã«ãçµè«ã®
ããããã¹ãŠã®å°é£ãèæ ®ãããšãããŒããã©ã€ããè³Œå ¥ãããããã¹ãŠãã¯ã©ãŠãã«ã¢ããããŒãããæ¹ããåé¡ã«å¯Ÿããã¯ããã«ç°¡åãªè§£æ±ºçã®ããã«æãããããããŸããã ããããä»ã¯çŽ æŽãããæ代ã«çããŠãããšã¯ãããææ¥ããªã³ã©ã€ã³ã«ã¢ã¯ã»ã¹ããŠè¿œå ããŒã¿ããã¹ãŠã©ããã«ã¢ããããŒãã§ãããšããä¿èšŒã¯ãããŸããã ãããã¯ãåºã«è¡ã£ãŠãããã« XNUMX ãã©ãã€ãã®ããŒã ãã©ã€ããè³Œå ¥ããŸãã ãã ããæ¢åã®å®¶ããã€ã§ã䜿çšã§ããŸãã
->
åºæïŒ habr.com