From 7c0df1034f16b59ff0565871d7140c959761c11c Mon Sep 17 00:00:00 2001 From: Peter Rowlands Date: Sun, 1 Dec 2019 12:50:37 +0900 Subject: [PATCH] Add APNG test cases Includes tests for reading and writing APNG files. The tests for reading files are based on the APNG browser compatibility tests from https://philip.html5.org/tests/apng/tests.html (which is linked in the Tests section of https://wiki.mozilla.org/APNG_Specification) --- Tests/images/apng/blend_op_over.png | Bin 0 -> 579 bytes .../apng/blend_op_over_near_transparent.png | Bin 0 -> 28791 bytes .../apng/blend_op_source_near_transparent.png | Bin 0 -> 614 bytes Tests/images/apng/blend_op_source_solid.png | Bin 0 -> 671 bytes .../apng/blend_op_source_transparent.png | Bin 0 -> 534 bytes Tests/images/apng/chunk_actl_after_idat.png | Bin 0 -> 470 bytes Tests/images/apng/chunk_multi_actl.png | Bin 0 -> 490 bytes Tests/images/apng/chunk_no_actl.png | Bin 0 -> 450 bytes Tests/images/apng/chunk_no_fctl.png | Bin 0 -> 432 bytes Tests/images/apng/chunk_no_fdat.png | Bin 0 -> 508 bytes Tests/images/apng/chunk_repeat_fctl.png | Bin 0 -> 508 bytes Tests/images/apng/delay.png | Bin 0 -> 1068 bytes Tests/images/apng/delay_round.png | Bin 0 -> 646 bytes Tests/images/apng/delay_short_max.png | Bin 0 -> 646 bytes Tests/images/apng/delay_zero_denom.png | Bin 0 -> 646 bytes Tests/images/apng/delay_zero_numer.png | Bin 0 -> 1067 bytes Tests/images/apng/dispose_op_background.png | Bin 0 -> 572 bytes .../dispose_op_background_before_region.png | Bin 0 -> 327 bytes .../apng/dispose_op_background_final.png | Bin 0 -> 508 bytes .../apng/dispose_op_background_region.png | Bin 0 -> 492 bytes Tests/images/apng/dispose_op_none.png | Bin 0 -> 617 bytes Tests/images/apng/dispose_op_none_region.png | Bin 0 -> 613 bytes Tests/images/apng/dispose_op_previous.png | Bin 0 -> 780 bytes .../images/apng/dispose_op_previous_final.png | Bin 0 -> 508 bytes .../images/apng/dispose_op_previous_first.png | Bin 0 -> 371 bytes .../apng/dispose_op_previous_region.png | Bin 0 -> 677 bytes Tests/images/apng/fctl_actl.png | Bin 0 -> 508 bytes Tests/images/apng/mode_16bit.png | Bin 0 -> 915 bytes Tests/images/apng/mode_greyscale.png | Bin 0 -> 331 bytes Tests/images/apng/mode_greyscale_alpha.png | Bin 0 -> 668 bytes Tests/images/apng/mode_palette.png | Bin 0 -> 262 bytes Tests/images/apng/mode_palette_1bit_alpha.png | Bin 0 -> 276 bytes Tests/images/apng/mode_palette_alpha.png | Bin 0 -> 308 bytes Tests/images/apng/num_plays.png | Bin 0 -> 646 bytes Tests/images/apng/num_plays_1.png | Bin 0 -> 646 bytes Tests/images/apng/sequence_fdat_fctl.png | Bin 0 -> 671 bytes Tests/images/apng/sequence_gap.png | Bin 0 -> 671 bytes Tests/images/apng/sequence_reorder.png | Bin 0 -> 687 bytes Tests/images/apng/sequence_reorder_chunk.png | Bin 0 -> 687 bytes Tests/images/apng/sequence_repeat.png | Bin 0 -> 671 bytes Tests/images/apng/sequence_repeat_chunk.png | Bin 0 -> 834 bytes Tests/images/apng/sequence_start.png | Bin 0 -> 671 bytes Tests/images/apng/single_frame.png | Bin 0 -> 307 bytes Tests/images/apng/single_frame_default.png | Bin 0 -> 470 bytes Tests/images/apng/split_fdat.png | Bin 0 -> 486 bytes Tests/images/apng/split_fdat_zero_chunk.png | Bin 0 -> 502 bytes Tests/images/apng/syntax_num_frames_high.png | Bin 0 -> 671 bytes .../images/apng/syntax_num_frames_invalid.png | Bin 0 -> 470 bytes Tests/images/apng/syntax_num_frames_low.png | Bin 0 -> 671 bytes Tests/images/apng/syntax_num_frames_zero.png | Bin 0 -> 65 bytes .../apng/syntax_num_frames_zero_default.png | Bin 0 -> 269 bytes Tests/test_file_png.py | 518 +++++++++++++++++- 52 files changed, 512 insertions(+), 6 deletions(-) create mode 100644 Tests/images/apng/blend_op_over.png create mode 100644 Tests/images/apng/blend_op_over_near_transparent.png create mode 100644 Tests/images/apng/blend_op_source_near_transparent.png create mode 100644 Tests/images/apng/blend_op_source_solid.png create mode 100644 Tests/images/apng/blend_op_source_transparent.png create mode 100644 Tests/images/apng/chunk_actl_after_idat.png create mode 100644 Tests/images/apng/chunk_multi_actl.png create mode 100644 Tests/images/apng/chunk_no_actl.png create mode 100644 Tests/images/apng/chunk_no_fctl.png create mode 100644 Tests/images/apng/chunk_no_fdat.png create mode 100644 Tests/images/apng/chunk_repeat_fctl.png create mode 100644 Tests/images/apng/delay.png create mode 100644 Tests/images/apng/delay_round.png create mode 100644 Tests/images/apng/delay_short_max.png create mode 100644 Tests/images/apng/delay_zero_denom.png create mode 100644 Tests/images/apng/delay_zero_numer.png create mode 100644 Tests/images/apng/dispose_op_background.png create mode 100644 Tests/images/apng/dispose_op_background_before_region.png create mode 100644 Tests/images/apng/dispose_op_background_final.png create mode 100644 Tests/images/apng/dispose_op_background_region.png create mode 100644 Tests/images/apng/dispose_op_none.png create mode 100644 Tests/images/apng/dispose_op_none_region.png create mode 100644 Tests/images/apng/dispose_op_previous.png create mode 100644 Tests/images/apng/dispose_op_previous_final.png create mode 100644 Tests/images/apng/dispose_op_previous_first.png create mode 100644 Tests/images/apng/dispose_op_previous_region.png create mode 100644 Tests/images/apng/fctl_actl.png create mode 100644 Tests/images/apng/mode_16bit.png create mode 100644 Tests/images/apng/mode_greyscale.png create mode 100644 Tests/images/apng/mode_greyscale_alpha.png create mode 100644 Tests/images/apng/mode_palette.png create mode 100644 Tests/images/apng/mode_palette_1bit_alpha.png create mode 100644 Tests/images/apng/mode_palette_alpha.png create mode 100644 Tests/images/apng/num_plays.png create mode 100644 Tests/images/apng/num_plays_1.png create mode 100644 Tests/images/apng/sequence_fdat_fctl.png create mode 100644 Tests/images/apng/sequence_gap.png create mode 100644 Tests/images/apng/sequence_reorder.png create mode 100644 Tests/images/apng/sequence_reorder_chunk.png create mode 100644 Tests/images/apng/sequence_repeat.png create mode 100644 Tests/images/apng/sequence_repeat_chunk.png create mode 100644 Tests/images/apng/sequence_start.png create mode 100644 Tests/images/apng/single_frame.png create mode 100644 Tests/images/apng/single_frame_default.png create mode 100644 Tests/images/apng/split_fdat.png create mode 100644 Tests/images/apng/split_fdat_zero_chunk.png create mode 100644 Tests/images/apng/syntax_num_frames_high.png create mode 100644 Tests/images/apng/syntax_num_frames_invalid.png create mode 100644 Tests/images/apng/syntax_num_frames_low.png create mode 100644 Tests/images/apng/syntax_num_frames_zero.png create mode 100644 Tests/images/apng/syntax_num_frames_zero_default.png diff --git a/Tests/images/apng/blend_op_over.png b/Tests/images/apng/blend_op_over.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe0f4ca789063c338ed8d3de74cddd44de7ffc3 GIT binary patch literal 579 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xe6x)whJ(vv-1 z978JRyuGxLk-WO`Nq62i1_lPHG>DUdOo)F#3^3qgNMT@96ViVG{j6jc^GZX~+ltJ@~ literal 0 HcmV?d00001 diff --git a/Tests/images/apng/blend_op_over_near_transparent.png b/Tests/images/apng/blend_op_over_near_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee5fe3bf27103ec8d8101e44f83677b9999fa65 GIT binary patch literal 28791 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 literal 0 HcmV?d00001 diff --git a/Tests/images/apng/blend_op_source_solid.png b/Tests/images/apng/blend_op_source_solid.png new file mode 100644 index 0000000000000000000000000000000000000000..d90c54967b6899c395d1d749401ba909e58c6d34 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xe6x)whJ(vv-1 z978JRyuGxLk-WO`Nq62i1_lPHG>DUdOo)F#3^3qgNMT@96ViVG{jDyf4D~bf`fKG#X1QhlSK(PJJ#x-a5Ex|)iod5{ zli>Lm*f8^Kwv9kHd(uY-9l4I9%o{5d#Q2XqYK$0Uf-P3YKMrsDXV%jN@}8%wpUXO@ GgeCx%x4t(3 literal 0 HcmV?d00001 diff --git a/Tests/images/apng/blend_op_source_transparent.png b/Tests/images/apng/blend_op_source_transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..0f290fd7fdbab8db7e78ae0d2a1183048e04cb0b GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xe6x)whJ(vv-1 z978JRyuGxLk-WO`Nq62i1_lPHG>DUdOo)F#3^3qgNMT@96ViVG{jDyf4D~bf`fKG#X1QhlSKzopr0AAF5p8x;= literal 0 HcmV?d00001 diff --git a/Tests/images/apng/chunk_actl_after_idat.png b/Tests/images/apng/chunk_actl_after_idat.png new file mode 100644 index 0000000000000000000000000000000000000000..296a29d4c117a67b5d81e62f85460e965f9e8567 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQU^R;978JRygg?q$iTqCp!j?G zH3^=7fekayX4?pKvnPFY(2?sn%Dk~cL5%;%qsE9qCfH(S{NwPZgKs|^2Kt2~F*(Es zNHYR4!xr6_3xJeV8bk~v)BwZ|KnwvX3@JdB0?*C>xzp2997BLKBQPW`Eo5Xc5NO$O zyZ+^S2~n3L$~SV|uh+3BFz_@m8ZfXOV31&7CY$q!MDMH9{slJ7JezGJ(9NFo(LqP9<0$jS3I#F#Baa#*2AN=s zmGO_mn-0GHa2V)6sWgb6flNq%fEZwq!jJ+C34v#4fV}BxDUKmPni1&hOA8qp3 z+^&E5UP9F6i1LkG_v>}+2@E_9j0OyB2N)z6n91fm;t@!1uwXtSsc?>=kgdbmVGbi6 ZAzRTKhc~S#60BnY0#8>zmvv4FO#rqikzD`) literal 0 HcmV?d00001 diff --git a/Tests/images/apng/chunk_no_actl.png b/Tests/images/apng/chunk_no_actl.png new file mode 100644 index 0000000000000000000000000000000000000000..5b68c7b44091bfd9103f419e1a8256abf56a2f97 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQU^R;978JRygg?q$iTqCp!j?G zH3^=7fekayX4?pKvnPFY(2?sn%Dk~cL5%;%qsE9qCfH(S{NwPZgKs|^2Kq%REjh#o zNP|EF5IX=d1f(#eFfcL*JUavAPESj53<1)NKwn>4$jD$I(6Zrn{mb_fqAo|2Z{)gP zuVYVO;AvnqU|>7IAi=;)Hs=wKKzf4(^ASmfa}0%S9mWoG81V?%irzT9X+@D>9Rm<} My85}Sb4q9e0JHXquK)l5 literal 0 HcmV?d00001 diff --git a/Tests/images/apng/chunk_no_fctl.png b/Tests/images/apng/chunk_no_fctl.png new file mode 100644 index 0000000000000000000000000000000000000000..58ca904abdc9f9cce4983e8916d69b89e6652145 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw5r`SK=)PP4qz-tx zIEGZrd3(-K5U7Ab@%Qv=5eYzrG<vil23_J~t1`KQm7$g{&$>u!b s5lC;aU_K(LaE_snt;5)14kI2RThSYbH`%l7xxfGfp00i_>zopr0Oh`s_5c6? literal 0 HcmV?d00001 diff --git a/Tests/images/apng/chunk_repeat_fctl.png b/Tests/images/apng/chunk_repeat_fctl.png new file mode 100644 index 0000000000000000000000000000000000000000..a5779855fc6344d6362d2c94a8988c963a71288e GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw5r`SK=)PP4qz-tx zIEGZrd3(-K5U7Ab@%Qv=5GfthU1BOZbD1`FmRk_zV-3fVf09p*6N a5waD%ad^{;BEdQaAnWO`Nq62i1_lPHG>DUdOo)F#3@|WaNMT^y?tEuCkk_4- z;ur#?8NnXmWnkbryy4&flJ7^BG)m53SMfZZ{+y8#_rn69K#o9QBphT2k~qBS*6zOb zKrQLqH11@o(EqRe{{?P{%VvV}XIA!Qg*=)Omvq8~hT=(qGPc&%kp) znb^Q1E{G{tb%*g{>(WUT(_i)hy#VtlC}A}Ku>%l;fx3X70t2Jed%H70E-aQ<2T3fc z@7H$+It%7_P)2D0Vh13G07eEN{3Md<0OZ1AiG2vh(v}Uq1t1@Jy85}Sb4q9e0CA}q A!2kdN literal 0 HcmV?d00001 diff --git a/Tests/images/apng/delay_round.png b/Tests/images/apng/delay_round.png new file mode 100644 index 0000000000000000000000000000000000000000..3f082665c99b80844f299d8f2f6a0eb7870e6e54 GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQjWO`Nq62i1_lPHG>DUdOo)F#3@~5>dV^7R#>!+MuRATp zF$736f<3~^z`%2O!@vI}-;XS5l$^n?;(0p#IU^;S|Nz{miEpFECS26DGU9nTDn1qO}=ga7qW=M6S&@JlF5e>v+t1J40v hVgrx3Af{Z^9mb2TOD9!Kf7u7}k*BMl%Q~loCIA}msxbfn literal 0 HcmV?d00001 diff --git a/Tests/images/apng/delay_short_max.png b/Tests/images/apng/delay_short_max.png new file mode 100644 index 0000000000000000000000000000000000000000..99d53b71812981b822516b5836860d2e6626e917 GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQjWO`Nq62i1_lPHG>DUdOo)F#3=pXQ|NkEYW07$QACS|X zmf{!!q#3~;;bmapIlSTD|B~-VmNZJvU{~=xo&KDW68FObpg@j5U?d!52$DFw>DKPP z^+4yq91jZb1|W6-Vlem*1PqJ~*KcwFx!a+RXNJZC14o0w|N5x&1{*f`C6uMVob{f8 k=YTS?fk#{rQ?BX`;w78)78&qol`;+0E1_+Z~y=R literal 0 HcmV?d00001 diff --git a/Tests/images/apng/delay_zero_denom.png b/Tests/images/apng/delay_zero_denom.png new file mode 100644 index 0000000000000000000000000000000000000000..bad60c767fbec09b0e188724a2f9bafc3c83035d GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQjWO`Nq62i1_lPHG>DUdOo)F#3@|VPl8is*?vDo2-DxR~ zAs{~3BfJa@Jcl>@`(N_?$dX3M8SE;ar_-M^QsRDC02Ig(2#kb-3_%iyH{IIZw;t#m znBzg=-2lW6Knw=VFPL92Fg~3ZE(GLmhdQ1a8Vd{@4F><~qs|*_*x;8?mi}_qdj_5Z i%ESg9aY0PEsymDqTbE9%nEtX4WO`Nq62i1_lPHG>DUdOo)F#3@AupV9Z%$?g->{r=>WC z0BJ_BM|c?+cn)v)`@iJ-ktI!%GuTtqIQy?MQ|t+#0Sn{^1jd6yOuSc?PO{r;(gJi2 z%<)V>b^{PQ05JkEo_o~}a`ZN+j=%%3bkb^{PQ05KRaeqnyW!1$o&-vb~Q7D=o~k@OE7NsYir zQt>>U{+yALL;S}I!2AN__@{@yH3GTY wp^?OnHImZ7k#s;ZpcrZZVh13G0B~#sd>6Y5 yIhq!GVEMUy-j8q{h?L&t;ucLK6VQmViD0 literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_background_before_region.png b/Tests/images/apng/dispose_op_background_before_region.png new file mode 100644 index 0000000000000000000000000000000000000000..427b829a025ea8c02ef23ba4c2fd6b080841c331 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xe6x)whJ(o$&< zF(4D70mJ|UE`}6FMte@Vg+Sh9PZ!6KiaBpDEo5Xc5NO$OyZ+^S2~n3L$~SV|uh+3B zFz_@m8ZfXOV31&7CY$q!M2F2gguSxLy3v8HqHrqy^n?32H rgN|IsQRa;m3S#_69yLY`GQk!r;~$4NrCbQ!2=bn%tDnm{r-UW|EYy*$ literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_background_region.png b/Tests/images/apng/dispose_op_background_region.png new file mode 100644 index 0000000000000000000000000000000000000000..05948d44aeddd75798f11b596ff11c6020588957 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw8HgEozUm4C(o$&< zF(4D70mJ|UE`}5aMl~V*2SDB`PZ!6KiaBpD9pq#%;9)j=zrSRc%fW?LAOAb1ak8gw zot*;%2Lq!514{#g00R?(bD^0*%qC#1JtG4(!Iu5M7#J}v1KIrD+L`0bP0l+XkKa!_Og literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_none.png b/Tests/images/apng/dispose_op_none.png new file mode 100644 index 0000000000000000000000000000000000000000..3094c1d23d6004e4c93fa6ffd4064d5cb023d9a4 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw8HgEozUm4C(o$&< zF(4D70mJ|UE`}5aMl~V*2SDCrPZ!6KiaBpDEo5Xc5NO$OyZ+^S2~n3L$~SV|uh+3B zFz_@m8ZfXOV31&7CY$q!M7#>= zT*p!7jTH)F{6`)&Mhr5+7AxZ)hc~5M2;KgrOewNe6o;Tz<=R!NrRn3|7FHs47PskFPOg!F2O$bBaaw2RygR$ z33L-;zGBuXIK1gc+u1r`sKG*$5y*A`Vg)D`U;u~aNtWf?fFj9hDUKmPnyF&W({qNr zAeO@K>DMG=`j}K~k26d0XV@(G*l>&jMgy-#)rUvE4uvOxhQk~Mj&>j)1||juRt84lLx(|944$rjF6*2UngH^+!bJc8 literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_previous.png b/Tests/images/apng/dispose_op_previous.png new file mode 100644 index 0000000000000000000000000000000000000000..1c15f132fe7da93954e03fa54f7da6987463a751 GIT binary patch literal 780 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw8HgEozUm4C(vv-1 z978JRyuGxLk-WO`Nq62i1_lPHG>DUdOo)F#3^3qgNMT@96ViVG{j6jc^GZX~+ltJ-ubCKsZkpE(`~rwtoMgjwh6V=)Mx!mV>p*He MUHx3vIVCg!0N<_7&j0`b literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_previous_final.png b/Tests/images/apng/dispose_op_previous_final.png new file mode 100644 index 0000000000000000000000000000000000000000..858f6f0382b3256d970c2359b689153d39bb491c GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xe6x)whJ(o$&< zF(4D70mJ|UE`}5aMl~V*2SDCrPZ!6KiaBpDEo5Xc5NO$OyZ+^S2~n3L$~SV|uh+3B zFz_@m8ZfXOV31&7CY$q!M2F2gguSxLy3v8HqHrqy^n?32H rgN|IsQRa;m3S#_69yLY`GQk!r;~$4NrCbQ!2=bn%tDnm{r-UW|@*$CG literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_previous_first.png b/Tests/images/apng/dispose_op_previous_first.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9b3cfae76a32b65fb8683d105fb989463d079b GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xe6x)whJ(o$&< zF(4D70mJ|UE`}5)MiCX?Bp`3Hr;B4q#hka77BVsz2()atUH|gEgs96Aklg)X=Baq%;!F)tg;T%IDTZgg397a4swxTxU`&cn Q>jo+FboFyt=akR{05Nn<@Bjb+ literal 0 HcmV?d00001 diff --git a/Tests/images/apng/dispose_op_previous_region.png b/Tests/images/apng/dispose_op_previous_region.png new file mode 100644 index 0000000000000000000000000000000000000000..f326afa5c279daccc38bf482596db2e1f88a8577 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw8HgEozUm4C(vv-1 z978JRyuGxLk-WO`Nq62i1_lPHG>DUdOo)F#3^3qgNMT@96ViVG{j6jc^GZX~+ltJCG<`kINc_xc}BphyhV*UUg)UjX{rK;ZC(59)tg z7cP|B@_Wzicj=cIqnJw?t})0iFm+(h;JrWsmtW!2her<<`yBw<19J@vkj)6iKne)J paUij`>>ZHJ4|NS|#hl~>2B6DX85ld#`}INUJYD@<);T3K0RZKi!1@3H literal 0 HcmV?d00001 diff --git a/Tests/images/apng/fctl_actl.png b/Tests/images/apng/fctl_actl.png new file mode 100644 index 0000000000000000000000000000000000000000..d0418ddd75f560ed4759fcb1819908d0b13e2094 GIT binary patch literal 508 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQc`KjAwEDF1R8+Y0f-@hiy?)9 zQB6qy0g%g)2vNlZWHYvOEq(^1Cwsa$hE&XXdubsfgMmQHhTHWo-%E(P98tcJ>wdkC zJ%NFzfzg10?Er%W12fs2M?3=Q4HnEtBo)pv6tZ;~JIrCkBV;RjWP&YL#y<{kO1Tic5#&8jS3j3^P66n+!osaDUQVC5Fa4T1jLLjU5lRq>93wH zjv*Cu-dn(fk&GmC4y1m@KBPnjrhBC(ymQrCx8JUl?DkEAQKW|AO;w4F{Cgs zstM^o0P?=2r8tHFX+}^`ZR7<8)!_|){+Dn);pAN^zHXLH@om+gt1B5i*&U1w_!V9< zc(6TVRFP#kdBCP&3A2La4E6~n3@Xf@87A>Hq$J2WTwax76)N7pgyTIh{-@E#99yo47eCl z7#P)r^dA6uwrMGjAwZfDWS=4J?r;ABq&O0jLwtZV6A&}DbS-`cq*r*l zIEGZrd3sKfk%57SW#RkyUt-LLjp?i79y9i`o5)?La2O1X1ANg(E*;8W+3^GDW~nrY zKY&b#CqWD_;9^K&U{n**e*omIPD^nN0n&^h-x=}(SxgGQr(cth>0?r{JGz&wOqDZfXLl-|m`OIb=8RU65M9yoK!r!&*i#N1N= literal 0 HcmV?d00001 diff --git a/Tests/images/apng/mode_palette.png b/Tests/images/apng/mode_palette.png new file mode 100644 index 0000000000000000000000000000000000000000..11ccfb6cba02b18bf51522560f32ee14e258124e GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`$P6T3NW8THQfvV}A+G;{jQzopr0DPA>zyJUM literal 0 HcmV?d00001 diff --git a/Tests/images/apng/mode_palette_alpha.png b/Tests/images/apng/mode_palette_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..f3c4c9f9e6d66d585f229af36308dd81a0af5941 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`#0(_Y@0k7uNO1=Egt-1^U;rW@-g{=VDUiWj z666>BpW%Pz8~J@eE=OW=h!2ov0%FFNuEo!Qw4|qtV@SoE9$hw%zO>_YhLm+E_&$KhMK@Nu*3UW;Y5IX=d1f+lrecNWL3gp5JWd<6` ip~@iPCW>Zk03*Yi*(>Cu{0{8~>GpK>b6Mw<&;$TsI!8PJ literal 0 HcmV?d00001 diff --git a/Tests/images/apng/num_plays.png b/Tests/images/apng/num_plays.png new file mode 100644 index 0000000000000000000000000000000000000000..4d76802e4ccd94f1d508743cf161798ca9670428 GIT binary patch literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQjWO`Nq62i1_lPHG>DUdOo)F#3@}JxNMT@P5O{V5$lIQl z;ur#?8KE9w;Ak-TUmtbeV8aH#gtGLPv)(iC98f0Ke&Sq7xvD#i7h9K3l52_n2y{Bk zqoBBH0AdFqh5)cf-?o{m0=eB#k1~Tj%FDpOb9lqQ|0Um#ENPUS!LH(YI{i5#B@qRS g=>jWO`Nq62i1_lPHG>DUdOo)F#3@}JxNMT@P5O{V5$lIQl z;ur#?8KE9w;Ak-TUmtbeV8aH#gtGLPv)(iC98f0Ke&Sq7xvD#i7h9K3l52_n2y{Bk zqoBBH0AdFqh5)cf-?o{m0=eB#k1~Tj%FDpOb9lqQ|0Um#ENPUS!LH(YI{i5#B@qRS g=>jvil23_J~t1`KQm7$g{&$>u!b5lC;aU_K(LaE_snt;5)14kI2R zThSYbH{DuL`h)@D5k?@p0f-%d7y`f^nVrld0p!9w!Z-*$vZ6?^4&-7_S3j3^P6V!Z literal 0 HcmV?d00001 diff --git a/Tests/images/apng/sequence_reorder_chunk.png b/Tests/images/apng/sequence_reorder_chunk.png new file mode 100644 index 0000000000000000000000000000000000000000..5d951ffe2a589325f39da5f6fbd855be2983400d GIT binary patch literal 687 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQU^R; z978JRygg?q2voqJ__GJlp00i_>zopr0QtDWJ^%m! literal 0 HcmV?d00001 diff --git a/Tests/images/apng/sequence_repeat.png b/Tests/images/apng/sequence_repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..d5cf83f9f98e4c25db142354b3ac9e6ec24807b5 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQU^R; z978JRygg?q2voqJ_|p=^ literal 0 HcmV?d00001 diff --git a/Tests/images/apng/sequence_start.png b/Tests/images/apng/sequence_start.png new file mode 100644 index 0000000000000000000000000000000000000000..5e040743a1d8d9e7ebba15fe25e11880089edc09 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw35Xd!_f9SVQU^R; z978JRygg?q2voqJ_iyb;Spvay8(zDfEWV69x3~J|09qK^9aiz^vJ0h56^;J?CI*~vd$@? F2>@j$!7%^; literal 0 HcmV?d00001 diff --git a/Tests/images/apng/single_frame.png b/Tests/images/apng/single_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd5bea856b6ed89d5a57d2bef5daaa02e59f3df GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw5r`SK=)PP4q@>ay zVj!UgAa(#^2uNW_0jd;ub_U2j;OXKRQZeW4IYU99F${{or(cuc`4`wQ^K7<_KsS5R tM+Y6bj-$*QD-^`|k34FO7-WJiR>nULZ#ww)!(ouuJYD@<);T3K0RX?tVKD#z literal 0 HcmV?d00001 diff --git a/Tests/images/apng/single_frame_default.png b/Tests/images/apng/single_frame_default.png new file mode 100644 index 0000000000000000000000000000000000000000..db7581fbdfcbebdcd3d442261782f8e1b3966395 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw5r`SK=)PP4q$Yd1 zIEGZrd3$LgBZGlJ%ZA(aFW*aux*Soyk?VfFjy-{ar-9Lcf$ac;1OqeKoJTwY=?xal zMlJ2~33=9lXX%Hs^nGpYg7+{dXkOK6Gz_T+z-jTEv z#}FXR2=vG~LqVWV85Dm{zb3)+FR)?e*=!quZuX>)4mxrjN0~QPD2VYNdDIv&$OK!g XjDH;7B+zBD7vwunS3j3^P6lJ2~33=9lXX%Hs^nGpYg7+{dXkOK6Gz_T+zo=RGZ zV+fFD1bXD0p&-zw42r*}Uz6bZ7uYcKY_^R+H+#}Y2OYVNWbO+wKy^!?>Y0u*Z>&%d j<3IAKF#@4zPzbhI8UHxEsV{7@FUYr^u6{1-oD!MlJ2~33=9lXX%Hs^nGpYg7+{dXkOK6Gz_T+zo=RGZ zV+fFD1bXD0p&-zw42r*}Uz6bZ7uYcKY_^R+H+#}Y2OYVNWbO+wKy@ro^-Qmio%aRu umq7WHq1PmZ6nalp7hZ{N3P>2^TrAVG5#Zu8Y2doV2hRU zkHeb|zWs0*=ohIpi2s00i045JFi2rYVPIqscy4D z`j_t|L|u+3-^g{pUdNumz|+8Jz`%BZL4tvqY|bMdf%FCo<|C2{=NJmvI*c9WFyaxi z6}@qI(~2U&ItGMCn1JjCAa(#^2mpKJZJVhokPGt&^C0wy@3k9VAQyYO`njxgN@xNA D)~>)I literal 0 HcmV?d00001 diff --git a/Tests/images/apng/syntax_num_frames_invalid.png b/Tests/images/apng/syntax_num_frames_invalid.png new file mode 100644 index 0000000000000000000000000000000000000000..ca7b13ab8ab4b98440130010f01e9396b44ea923 GIT binary patch literal 470 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwED+Mj)HvxmZpWkUHS$ z;uumf=j}N|L7)N##oyDfN$~s&Y?ygA+eV<9J?W!^j$Fr4=8Y8!V*E!QHAW0F!4@my zABQ&`eEZ=r&@WPHK>vaK1_TX2>;S|Nkiw7x^tHgVGeGY2v=qk>Ak7H$^`(W33m_5=o=21Wx0wgU_j49sM69`OjIH&`$qkyJRxP{`I{>@bHB akC3hCjl-K(6baTb0D-5gpUXO@geCxpsf~XC literal 0 HcmV?d00001 diff --git a/Tests/images/apng/syntax_num_frames_low.png b/Tests/images/apng/syntax_num_frames_low.png new file mode 100644 index 0000000000000000000000000000000000000000..6f895f91d75f5b01cb34f83d0f12354aced90701 GIT binary patch literal 671 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEEw5r`SK=)PP4qz-tx zIEGZrd3(-K5U7Ab@%Qv=56-9z|3;S|N0QSh+Hd9p~7v>S>LFf_RYd5?=F7|Zwb6Mw<&;$VG CGQU&+ literal 0 HcmV?d00001 diff --git a/Tests/images/apng/syntax_num_frames_zero.png b/Tests/images/apng/syntax_num_frames_zero.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb7ea36e3e338376493f0a9d2cf95388528afcd GIT binary patch literal 65 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!3HERU8}DLQXGlNAwEDF3_5)e2!I%#u6{1- HoD!M