ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π”Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ JPEG для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

[FF D8]

Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ взял рисунок помСньшС. Π­Ρ‚ΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ, Π½ΠΎ сильно ΠΏΠ΅Ρ€Π΅ΠΆΠ°Ρ‚Ρ‹ΠΉ favicon Π“ΡƒΠ³Π»Π°: ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. 60669610479084c8ecd776f5a2acd10c. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-60669610479084c8ecd776f5a2acd10c. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 60669610479084c8ecd776f5a2acd10c. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ описаниС ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΎ, ΠΈ привСдСнная информация Π½Π΅ полная, Π½ΠΎ Π·Π°Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ.

Π”Π°ΠΆΠ΅ Π½Π΅ зная, ΠΊΠ°ΠΊ происходит ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

[FF D8] β€” ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π½Π°Ρ‡Π°Π»Π°. Он всСгда находится Π² Π½Π°Ρ‡Π°Π»Π΅ всСх jpg-Ρ„Π°ΠΉΠ»ΠΎΠ².

Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄ΡƒΡ‚ Π±Π°ΠΉΡ‚Ρ‹ [FF FE]. Π­Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π½Π°Ρ‡Π°Π»ΠΎ сСкции с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 2 Π±Π°ΠΉΡ‚Π° [00 04] β€” Π΄Π»ΠΈΠ½Π° сСкции (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ эти 2 Π±Π°ΠΉΡ‚Π°). Π—Π½Π°Ρ‡ΠΈΡ‚ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… [3A 29] β€” сам ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΊΠΎΠ΄Ρ‹ символов «:» ΠΈ «)», Ρ‚.Π΅. ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ смайлика. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π³ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΏΡ€Π°Π²ΠΎΠΉ части hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

НСмного Ρ‚Π΅ΠΎΡ€ΠΈΠΈ

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ, нСбольшими частями:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π»ΠΎΠΊ Yij, Cbij, Crij β€” это ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов Π”ΠšΠŸ (Ρ‚Π°ΠΊ ΠΆΠ΅ 8×8), закодированная ΠΊΠΎΠ΄Π°ΠΌΠΈ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°. Π’ Ρ„Π°ΠΉΠ»Π΅ ΠΎΠ½ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС: Y00Y10Y01Y11Cb00Cr00Y20.

Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

Π€Π°ΠΉΠ» ΠΏΠΎΠ΄Π΅Π»Π΅Π½ Π½Π° сСкторы, прСдваряСмыС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ. ΠœΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Π»ΠΈΠ½Ρƒ 2 Π±Π°ΠΉΡ‚Π°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±Π°ΠΉΡ‚ [FF]. ΠŸΠΎΡ‡Ρ‚ΠΈ всС сСкторы хранят свою Π΄Π»ΠΈΠ½Ρƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… 2 Π±Π°ΠΉΡ‚Π° послС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°. Для удобства подсвСтим ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠœΠ°Ρ€ΠΊΠ΅Ρ€ [FF DB]: DQT β€” Ρ‚Π°Π±Π»ΠΈΡ†Π° квантования

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠžΡΡ‚Π°Π²ΡˆΠΈΠΌΠΈΡΡ 64-мя Π±Π°ΠΉΡ‚Π°ΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ 8×8.

ΠŸΡ€ΠΈΠ³Π»ΡΠ΄ΠΈΡ‚Π΅ΡΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ значСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎΡ‚ порядок называСтся zigzag order:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠœΠ°Ρ€ΠΊΠ΅Ρ€ [FF C0]: SOF0 β€” Baseline DCT

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ называСтся SOF0, ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Он ΠΎΡ‡Π΅Π½ΡŒ распространСн. Но Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ популярСн Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Π²Π°ΠΌ progressive-ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° сначала загруТаСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Π½ΠΈΠ·ΠΊΠΈΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ, Π½Π΅ доТидаясь ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. БпСцификация опрСдСляСт Π΅Ρ‰Π΅ нСсколько, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ распространСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Находим Hmax=2 ΠΈ Vmax=2. Канал i Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ€Π΅ΠΆΠ΅Π½ Π² Hmax/Hi Ρ€Π°Π· ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Vmax/Vi Ρ€Π°Π· ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ.

ΠœΠ°Ρ€ΠΊΠ΅Ρ€ [FF C4]: DHT (Ρ‚Π°Π±Π»ΠΈΡ†Π° Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°)

Π­Ρ‚Π° сСкция Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠ΄Ρ‹ ΠΈ значСния, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°.

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 16 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠ΄ΠΎΠ² ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ количСство ΠΊΠΎΠ΄ΠΎΠ² Ρ‚Π°ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ сСкция Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π»ΠΈΠ½Ρ‹ ΠΊΠΎΠ΄ΠΎΠ², Π° Π½Π΅ сами ΠΊΠΎΠ΄Ρ‹. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ΄Ρ‹ сами. Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ΄ Π΄Π»ΠΈΠ½Ρ‹ 1 ΠΈ ΠΎΠ΄ΠΈΠ½ β€” Π΄Π»ΠΈΠ½Ρ‹ 2. Π˜Ρ‚ΠΎΠ³ΠΎ 2 ΠΊΠΎΠ΄Π°, большС ΠΊΠΎΠ΄ΠΎΠ² Π² этой Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½Π΅Ρ‚.
Π‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ сопоставлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² Ρ„Π°ΠΉΠ»Π΅ ΠΎΠ½ΠΈ пСрСчислСны слСдом. ЗначСния ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅, поэтому Ρ‡ΠΈΡ‚Π°Π΅ΠΌ 2 Π±Π°ΠΉΡ‚Π°:

Π”Π°Π»Π΅Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Ρ‰Π΅ 3 ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° [FF C4], я ΠΏΡ€ΠΎΠΏΡƒΡ‰Ρƒ Ρ€Π°Π·Π±ΠΎΡ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… сСкций, ΠΎΠ½ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ.

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠ΄ΠΎΠ² Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π°

ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π² сСкции DHT. А ΡƒΠΆΠ΅ ΠΏΠΎ этому Π΄Π΅Ρ€Π΅Π²Ρƒ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ΄. ЗначСния добавляСм Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Алгоритм прост: Π² ΠΊΠ°ΠΊΠΎΠΌ Π±Ρ‹ ΡƒΠ·Π»Π΅ ΠΌΡ‹ Π½ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ, всСгда пытаСмся Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π»Π΅Π²ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ. А Ссли ΠΎΠ½Π° занята, Ρ‚ΠΎ Π² ΠΏΡ€Π°Π²ΡƒΡŽ. А Ссли ΠΈ Ρ‚Π°ΠΌ Π½Π΅Ρ‚ мСста, Ρ‚ΠΎ возвращаСмся Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅, ΠΈ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΡ‚Ρ‚ΡƒΠ΄Π°. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π½ΡƒΠΆΠ½ΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ€Π°Π²Π½ΠΎΠΌ Π΄Π»ΠΈΠ½Π΅ ΠΊΠΎΠ΄Π°. Π›Π΅Π²Ρ‹ΠΌ вСтвям соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0, ΠΏΡ€Π°Π²Ρ‹ΠΌ β€” 1.

Π”Π΅Ρ€Π΅Π²ΡŒΡ для всСх Ρ‚Π°Π±Π»ΠΈΡ† этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π’ ΠΊΡ€ΡƒΠΆΠΊΠ°Ρ… β€” значСния ΠΊΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ΄ ΠΊΡ€ΡƒΠΆΠΊΠ°ΠΌΠΈ β€” сами ΠΊΠΎΠ΄Ρ‹ (поясню, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΈΡ…, пройдя ΠΏΡƒΡ‚ΡŒ ΠΎΡ‚ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π΄ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°). ИмСнно Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ само содСрТимоС рисунка.

ΠœΠ°Ρ€ΠΊΠ΅Ρ€ [FF DA]: SOS (Start of Scan)

Π‘Π°ΠΉΡ‚ [DA] Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ β€” «ДА! НаконСц-Ρ‚ΠΎ Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΊ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ сСкции!Β». Однако сСкция символично называСтся SOS.

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

[00], [3F], [00] β€” Start of spectral or predictor selection, End of spectral selection, Successive approximation bit position. Π­Ρ‚ΠΈ значСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для прогрСссивного Ρ€Π΅ΠΆΠΈΠΌΠ°, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° (ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° [FF D9]) Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. ΠŸΠ΅Ρ€Π²Ρ‹Ρ… 33 Π±ΠΈΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ коэффициСнтов:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

НахоТдСниС DC-коэффициСнта

1) Π§ΠΈΡ‚Π°Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ² (Ссли встрСтим 2 Π±Π°ΠΉΡ‚Π° [FF 00], Ρ‚ΠΎ это Π½Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, Π° просто Π±Π°ΠΉΡ‚ [FF]). ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° сдвигаСмся ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ Π₯Π°Ρ„Ρ„ΠΌΠ°Π½Π° (с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ) ΠΏΠΎ Π²Π΅Ρ‚Π²ΠΈ 0 ΠΈΠ»ΠΈ 1, Π² зависимости ΠΎΡ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π°. ΠžΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΡ, Ссли оказались Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΡƒΠ·Π»Π΅.

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

2) Π‘Π΅Ρ€Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π°. Если ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 0, Ρ‚ΠΎ коэффициСнт Ρ€Π°Π²Π΅Π½ 0, записываСм Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… коэффициСнтов. Π’ нашСм случаС β€” 02. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Π΄Π»ΠΈΠ½Π° коэффициСнта Π² Π±ΠΈΡ‚Π°Ρ…. Π’. Π΅. Ρ‡ΠΈΡ‚Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 2 Π±ΠΈΡ‚Π°, это ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ коэффициСнт:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

НахоТдСниС AC-коэффициСнтов

1) АналогичСн ΠΏ. 1, нахоТдСния DC коэффициСнта. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

2) Π‘Π΅Ρ€Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π°. Если ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 0, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ значСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нулями. Π”Π°Π»ΡŒΡˆΠ΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° ΡƒΠΆΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°. Π’ нашСм случаС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π°: 0x31.

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π§ΠΈΡ‚Π°Ρ‚ΡŒ AC-коэффициСнты Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ наткнСмся Π½Π° Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ заполнится ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°.
Π’ нашСм случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ значСния Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Π·ΠΈΠ³Π·Π°Π³ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΌ порядкС? ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° использования Ρ‚Π°ΠΊΠΎΠ³ΠΎ порядка простая β€” Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Π΅ΠΌ большС значСния v ΠΈ u, Ρ‚Π΅ΠΌ мСньшСй Π·Π½Π°Ρ‡ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ коэффициСнт Svu Π² дискрСтно-косинусном ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΏΡ€ΠΈ высоких стСпСнях сТатия ΠΌΠ°Π»ΠΎΠ·Π½Π°Ρ‡Π°Ρ‰ΠΈΠ΅ коэффициСнты ΠΎΠ±Π½ΡƒΠ»ΡΡŽΡ‚, Ρ‚Π΅ΠΌ самым ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π°.

Аналогично ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΅Ρ‰Π΅ 3 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Y-канала…

Но! Π—Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ DC-коэффициСнты β€” это Π½Π΅ сами DC-коэффициСнты, Π° ΠΈΡ… разности ΠΌΠ΅ΠΆΠ΄Ρƒ коэффициСнтами ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ (Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ°Π½Π°Π»Π°)! НуТно ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ порядок. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ дСйствуСт Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°.

… ΠΈ ΠΏΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ для Cb ΠΈ Cr:

ВычислСния

ΠšΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ этап квантования? Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡ‡Π»Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ с элСмСнтами ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ квантования. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ просканировали ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ°Π½Π°Π». Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ квантования 0 (Ρƒ нас ΠΎΠ½Π° пСрвая ΠΈΠ· Π΄Π²ΡƒΡ…). Π˜Ρ‚Π°ΠΊ, послС пСрСмноТСния ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ 4 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Y-ΠΊΠ°Π½Π°Π»Π°:

… ΠΈ ΠΏΠΎ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ для Cb ΠΈ Cr.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ дискрСтно-косинусноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π€ΠΎΡ€ΠΌΡƒΠ»Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ слоТностСй. Svu β€” наша получСнная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов. u β€” столбСц, v β€” строка. Cx = 1/√2 для x = 0, Π° Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях = 1. syx β€” нСпосрСдствСнно значСния ΠΊΠ°Π½Π°Π»ΠΎΠ².

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΊΠ°Π½Π°Π»Π° Y (послС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ округлСния):

Ко всСм ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ значСниям Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ 128, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0 Π΄ΠΎ 255:

НапримСр: 138 β†’ 266 β†’ 255, 92 β†’ 220 β†’ 220 ΠΈ Ρ‚. Π΄.

YCbCr Π² RGB

4 ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Y, ΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Cb ΠΈ Cr, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€ΠΎΡ€Π΅ΠΆΠΈΠ²Π°Π»ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹ ΠΈ 4 пиксСлям Y соотвСтствуСт ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Cb ΠΈ Cr. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ‚Π°ΠΊ: YCbCrToRGB(Y[y,x], Cb[y/2, x/2], Cr[y/2, x/2]):

Π’ΠΎΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ для ΠΊΠ°Π½Π°Π»ΠΎΠ² R, G, B для Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° 8×8 нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

ΠšΠΎΠ½Π΅Ρ†

Π’ΠΎΠΎΠ±Ρ‰Π΅ я Π½Π΅ спСциалист ΠΏΠΎ JPEG, поэтому вряд Π»ΠΈ смогу ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° всС вопросы. ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΊΠΎΠ³Π΄Π° я писал свой Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€, ΠΌΠ½Π΅ часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ нСпонятными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. И ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, я Π½Π΅ Π·Π½Π°Π» Π³Π΄Π΅ допустил ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠœΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» Π±ΠΈΡ‚Ρ‹, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ использовал Π”ΠšΠŸ. ΠžΡ‡Π΅Π½ΡŒ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π»ΠΎ пошагового ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, поэтому, надСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ написании Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π°. Π”ΡƒΠΌΠ°ΡŽ, ΠΎΠ½Π° ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ описаниС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π½ΠΎ всС-Ρ€Π°Π²Π½ΠΎ нСльзя ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅ΠΉ. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΠΌΠ½Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°, которая ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ являСтся ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Javascript

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранятся ΠΊΠ°ΠΊ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π° Ρ„Π°ΠΉΠ» Javascript ΠΏΠΎ сути являСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ тСкстом. Оба Ρ‚ΠΈΠΏΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ собствСнным ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ: изобраТСния ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ Javascript ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ синтаксису. Π― задался вопросом: ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» изобраТСния, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ допустимым синтаксисом Javascript, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ?

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ эту пСсочницу ΠΊΠΎΠ΄Π° с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠΈΡ… экспСримСнтов:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΡŽΠ΄Π°:

Π’Ρ‹Π±ΠΎΡ€ подходящСго Ρ‚ΠΈΠΏΠ° изобраТСния

К соТалСнию, изобраТСния содСрТат мноТСство Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Π² качСствС Javascript Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ моя пСрвая ΠΌΡ‹ΡΠ»ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»Π°ΡΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Ρ‡Ρ‚ΠΎ Ссли просто ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния Π² большой ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈΠ²Ρ‘Π» мСня ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ΄Π΅Π΅: Ρ‡Ρ‚ΠΎ Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΊΠ°ΠΊ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ строки:

К соТалСнию, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ Π±Π°ΠΉΡ‚ΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ содСрТат Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Но Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: GIF. Π‘Π»ΠΎΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° GIF ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ 47 49 46 38 39 61, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ прСобразуСтся Π² ASCII Π² строку GIF89a β€” Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ допустимоС имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ!

Π’Ρ‹Π±ΠΎΡ€ подходящих Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² изобраТСния

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ нашли Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ изобраТСния, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ с допустимого ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ символы Π·Π½Π°ΠΊΠ° равСнства ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ апострофа (backtick). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»Π° Π±ΡƒΠ΄ΡƒΡ‚: 3D 09 60 04

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ изобраТСния

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GIF Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° послС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния. Нам Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½ΠΈΡ… 3D (Π·Π½Π°ΠΊ равСнства) ΠΈ 60 (ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ апостроф, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ строку). Π’ GIF ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ порядок little endian, поэтому Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ символы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ влияниС Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния. Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ ΠΈ высотой Π² дСсятки тысяч пиксСлСй. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ большиС Π±Π°ΠΉΡ‚Ρ‹ 3D ΠΈ 60 Π² Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚Π°Ρ….

НаимСньший ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹ΠΉ символ β€” это 09 (символ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ табуляции). Он Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ ΡˆΠΈΡ€ΠΈΠ½Ρƒ изобраТСния 3D 09, Ρ‡Ρ‚ΠΎ Π² little endian Ρ€Π°Π²Π½ΠΎ 2365; Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡˆΠΈΡ€Π΅, Ρ‡Π΅ΠΌ Π±Ρ‹ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ.

Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° высоты ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π΄Π°ΡŽΡ‰Π΅Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон. Π― Π²Ρ‹Π±Ρ€Π°Π» 04, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ высоту 60 04, ΠΈΠ»ΠΈ 1120 пиксСлСй.

ЗасовываСм Π² Ρ„Π°ΠΉΠ» скрипт

Пока наш исполняСмый GIF ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚. Он просто присваиваСт глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ GIF89a Π΄Π»ΠΈΠ½Π½ΡƒΡŽ строку. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ происходило Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсноС! Основная Ρ‡Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ GIF ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для кодирования изобраТСния, поэтому Ссли ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° Javascript, Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ сильно искаТённым. Но ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ GIF содСрТит Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Comment Extension. Π­Ρ‚ΠΎ мСсто для хранСния ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€ΠΎΠΌ GIF β€” идСальноС мСсто для нашСй Javascript-Π»ΠΎΠ³ΠΈΠΊΠΈ.

Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² находится сразу послС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ†Π²Π΅Ρ‚ΠΎΠ² GIF. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° любоС содСрТимоС, ΠΌΠΎΠΆΠ½ΠΎ запросто Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ строку GIF89a, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вСсь Javascript, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ многострочный Π±Π»ΠΎΠΊ коммСнтария, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ изобраТСния Π½Π΅ влияла Π½Π° парсСр Javascript.

Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ наш Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Однако сущСствуСт нСбольшоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: хотя сам Π±Π»ΠΎΠΊ коммСнтария ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΎΠ½ состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ΄Π±Π»ΠΎΠΊΠΎΠ², ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… составляСт 255. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ΄Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π΄Π»ΠΈΠ½Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ΄Π±Π»ΠΎΠΊΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° большой скрипт, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

ШСстнадцатСричныС ΠΊΠΎΠ΄Ρ‹ Π² коммСнтариях β€” это Π±Π°ΠΉΡ‚Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ΄Π±Π»ΠΎΠΊΠ°. Они Π½Π΅ относятся ΠΊ Javascript, Π½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ„Π°ΠΉΠ»Π° GIF. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ мСшали ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части ΠΊΠΎΠ΄Π°, ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π― написал нСбольшой скрипт, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ скрипта ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡ… Π² Ρ„Π°ΠΉΠ» изобраТСния:

ΠŸΠΎΠ΄Ρ‡ΠΈΡ‰Π°Π΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ базовая структура, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния Π½Π΅ испортили синтаксис ΠΊΠΎΠ΄Π°. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, Ρ„Π°ΠΉΠ» состоит ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²: Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ выполняСтся присваиваниС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ GIF89a, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” это ΠΊΠΎΠ΄ Π½Π° Javascript, Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ β€” ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк.

Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ с присвоСниСм значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

БорСмся с искаТСниями

Π’ ΠΊΠΎΠ½Ρ†Π΅ Javascript-ΠΊΠΎΠ΄Π° ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π»ΠΈ многострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния Π½Π΅ влияли Π½Π° парсинг Javascript:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. image loader. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ Ρ„Π°ΠΉΠ»

Нам ΠΎΡΡ‚Π°Π»Π°ΡΡŒ послСдняя опСрация β€” Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°. Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ Π±Π°ΠΉΡ‚Π°ΠΌΠΈ 00 3B, поэтому Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Ρ€Π°Π½ΡŒΡˆΠ΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ поврСТдСния Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ особо Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹, я просто Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ» ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΠ· Π±Π»ΠΎΠΊΠΎΠ² ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» однострочный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ парсингС:

Π£Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Refused to execute script from ‘http://localhost:8080/image.gif’ because its MIME type (‘image/gif’) is not executable. [ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ исполнСния скрипта ΠΈΠ· ‘http://localhost:8080/image.gif’, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ MIME-Ρ‚ΠΈΠΏ Π½Π΅ являСтся исполняСмым.]

Π’ΠΎ Π΅ΡΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ справСдливо Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Π­Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, я Π½Π΅ Π±ΡƒΠ΄Ρƒ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ!Β». И Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это Π²ΠΏΠΎΠ»Π½Π΅ умСстно. Но ΠΌΡ‹ всё Ρ€Π°Π²Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ. РСшСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ просто Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ это ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Для этого я написал нСбольшой сСрвСр, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°.

Π‘Π΅Π· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ MIME-Ρ‚ΠΈΠΏΠ΅ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π² контСкстС: ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π΅Π³Π΅ ΠΈΠ»ΠΈ исполняСт ΠΊΠ°ΠΊ Javascript Π² Ρ‚Π΅Π³Π΅

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ bmp Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π‘Ρ‡ΠΈΡ‚Π°ΡŽ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π² hex Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. QUmIz. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-QUmIz. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° QUmIz. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

1 ΠΎΡ‚Π²Π΅Ρ‚ 1

Для Π½Π°Ρ‡Π°Π»Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΎΠ±Ρ‰ΠΈΠΌ описаниСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ: BMP.

Если ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ, Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈΠ΄ΡƒΡ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ сами Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

ΠžΠ±Ρ‰Π°Ρ структура

Π”Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ BMP состоят ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… основных Π±Π»ΠΎΠΊΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°:

По сути, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎ описания ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ дальшС, описаниС структуры BITMAPFILEHEADER (которая, собствСнно, ΠΈΠ΄Π΅Ρ‚ с Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π° BMP):

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ваш ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. . ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Π’ ΠΏΠΎΠ»Π΅ bfOffBits Π² Ρ„Π°ΠΉΠ»Π΅ записано число 0x36, ΠΈ ΠΏΠΎ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ 0x36 ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π° подряд ΠΈΠ΄ΡƒΡ‚ значСния FF (совпадСниС? Π½Π΅ Π΄ΡƒΠΌΠ°ΡŽ). Π’Ρ€ΠΎΠΉΠΊΠ° Π±Π°ΠΉΡ‚ FF FF FF (8 Π±ΠΈΡ‚ * 3 = 24 Π±ΠΈΡ‚Π° Π½Π° пиксСль) ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΊΠΎΠ΄ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ пиксСль Π±Π΅Π»ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°, Ρ‚.Π΅. это ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΅ΡΡ‚ΡŒ искомыС ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ RGB с 24 Π±ΠΈΡ‚Π°ΠΌΠΈ Π½Π° пиксСль. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ.

Для этого Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ слСдом Π·Π° структурой. А слСдом ΠΈΠ΄Π΅Ρ‚ структура BITMAPINFO, Π½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий. ВСрсия задаСтся Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚Π°Ρ…. Бамая дрСвняя вСрсия ΠΈΠΌΠ΅Π»Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ 12 Π±Π°ΠΉΡ‚, Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΡ‚ 40 Π±Π°ΠΉΡ‚ ΠΈ Π²Ρ‹ΡˆΠ΅. Π‘ΡƒΠ΄Π΅ΠΌ для простоты ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ BMP, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ структуры BITMAPINFO Ρƒ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² совпадаСт.

Π˜Ρ‚Π°ΠΊ, Π² структурах BITMAPINFO Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ… ΠΏΠΎ порядку ΠΈΠ΄ΡƒΡ‚:

Π‘Π½ΠΎΠ²Π° смотрим Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. PyRmi. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Ρ„ΠΎΡ‚ΠΎ. ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄-PyRmi. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° PyRmi. Π’Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ устроСн jpg-Ρ„Π°ΠΉΠ»? БСйчас разбСрСмся! ΠŸΡ€ΠΎΠ³Ρ€Π΅Π²Π°ΠΉΡ‚Π΅ ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ компилятор ΠΈ hex-Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это:

Как с этим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ? Π”Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

ПсСвдокод для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ случая:

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ, Ссли Π² ΠΏΠΎΠ»Π΅ biHeight Π»Π΅ΠΆΠΈΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, Ρ‚ΠΎ строки пиксСлСй Π² Ρ„Π°ΠΉΠ»Π΅ записаны Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС (ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅ΠΉ строки ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ строкС). Если ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ Π² прямом порядкС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ изобраТСния Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½ΠΈΠΆΠ΅:
010000100100110111110110000000010000000000000000000000000000 0000
000000000000000000111110000000000000000000000000001010000000 0000
000000000000000000110111000000000000000000000000001101110000 0000
000000000000000000000001000000000000000100000000000000000000 0000
000000000000000010111000000000010000000000000000110001000000 1110
000000000000000011000100000011100000000000000000000000100000 0000
000000000000000000000010000000000000000000000000111111111111 1111
111111110000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000001111000 0000
000000000000000000000000000000000000000000000000000001111100 0000
000000000000000000000000000000000000000000000000000001111100 0000
000000000000000000000000111100000000000000000000000001111100 0000
000000000000000000000001111100000000000000000000000001111110 0000
000000000000000000000001111100000000000000000000000000111110 0000
000000000000000000000011111100000000000000000000000000111111 0000
000000000000000000000011111100000000000000000000000000011111 0000
000000000000000000000011111000000000000000000000000000011111 1000
000000000000000000000111111000000000000000000000000000001111 1000
000000000000000000000111110000000000000000000000000000001111 1100
000000000000000000001111110000000000000000000000000000000111 1100
000000000000000000001111100000000000000000000000000000000111 1100
000000000000000000011111100000000000000000000000000000000111 1110
000000000000000000011111000000000000000000000000000000000011 1110
000000000000000000111111000000000000000000000000000000000011 1111
111111111111111111111110000000000000000000000000000000000001 1111
111111111111111111111110000000000000000000000000000000000001 1111
111111111111111111111100000000000000000000000000000000000001 1111
111111111111111111111100000000000000000000000000000000000001 1111
111111111111111111111000000000000000000000000000000000000000 1111
111111111111111111111000000000000000000000000000000000000000 0111
111000000000000111110000000000000000000000000000000000000000 0111
111000000000001111110000000000000000000000000000000000000000 0011
111000000000001111100000000000000000000000000000000000000000 0011
111100000000011111100000000000000000000000000000000000000000 0001
111100000000011111000000000000000000000000000000000000000000 0001
111110000000111111000000000000000000000000000000000000000000 0000
111110000000111110000000000000000000000000000000000000000000 0000
111111000001111110000000000000000000000000000000000000000000 0000
011111000001111100000000000000000000000000000000000000000000 0000
011111100011111100000000000000000000000000000000000000000000 0000
001111100011111000000000000000000000000000000000000000000000 0000
001111100111111000000000000000000000000000000000000000000000 0000
001111110111110000000000000000000000000000000000000000000000 0000
000111111111110000000000000000000000000000000000000000000000 0000
000111111111100000000000000000000000000000000000000000000000 0000
000011111111100000000000000000000000000000000000000000000000 0000
000011111111000000000000000000000000000000000000000000000000 0000
000001111111000000000000000000000000000000000000000000000000 0000
000001111111000000000000000000000000000000000000000000000000 0000
000001111110000000000000000000000000000000000000000000000000 0000
000000111110000000000000000000000000000000000000000000000000 0000
000000111110000000000000000000000000000000000000000000000000 0000
000000011110000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000000000000000 0000
000000000000000000000000000000000000000000000000

01000010 01001101 11110110 00000001 00000000 00000000 00000000 00000000
00000000 00000000 00111110 00000000 00000000 00000000 00101000 00000000
00000000 00000000 00110111 00000000 00000000 00000000 00110111 00000000
00000000 00000000 00000001 00000000 00000001 00000000 00000000 00000000
00000000 00000000 10111000 00000001 00000000 00000000 11000100 00001110
00000000 00000000 11000100 00001110 00000000 00000000 00000010 00000000
00000000 00000000 00000010 00000000 00000000 00000000 11111111 11111111
11111111 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 10000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 11000000
00000000 00000000 00000000 00000000 00000000 00000000 00000111 11000000
00000000 00000000 00000000 11110000 00000000 00000000 00000111 11000000
00000000 00000000 00000001 11110000 00000000 00000000 00000111 11100000
00000000 00000000 00000001 11110000 00000000 00000000 00000011 11100000
00000000 00000000 00000011 11110000 00000000 00000000 00000011 11110000
00000000 00000000 00000011 11110000 00000000 00000000 00000001 11110000
00000000 00000000 00000011 11100000 00000000 00000000 00000001 11111000
00000000 00000000 00000111 11100000 00000000 00000000 00000000 11111000
00000000 00000000 00000111 11000000 00000000 00000000 00000000 11111100
00000000 00000000 00001111 11000000 00000000 00000000 00000000 01111100
00000000 00000000 00001111 10000000 00000000 00000000 00000000 01111100
00000000 00000000 00011111 10000000 00000000 00000000 00000000 01111110
00000000 00000000 00011111 00000000 00000000 00000000 00000000 00111110
00000000 00000000 00111111 00000000 00000000 00000000 00000000 00111111
11111111 11111111 11111110 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111110 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111100 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111100 00000000 00000000 00000000 00000000 00011111
11111111 11111111 11111000 00000000 00000000 00000000 00000000 00001111
11111111 11111111 11111000 00000000 00000000 00000000 00000000 00000111
11100000 00000001 11110000 00000000 00000000 00000000 00000000 00000111
11100000 00000011 11110000 00000000 00000000 00000000 00000000 00000011
11100000 00000011 11100000 00000000 00000000 00000000 00000000 00000011
11110000 00000111 11100000 00000000 00000000 00000000 00000000 00000001
11110000 00000111 11000000 00000000 00000000 00000000 00000000 00000001
11111000 00001111 11000000 00000000 00000000 00000000 00000000 00000000
11111000 00001111 10000000 00000000 00000000 00000000 00000000 00000000
11111100 00011111 10000000 00000000 00000000 00000000 00000000 00000000
01111100 00011111 00000000 00000000 00000000 00000000 00000000 00000000
01111110 00111111 00000000 00000000 00000000 00000000 00000000 00000000
00111110 00111110 00000000 00000000 00000000 00000000 00000000 00000000
00111110 01111110 00000000 00000000 00000000 00000000 00000000 00000000
00111111 01111100 00000000 00000000 00000000 00000000 00000000 00000000
00011111 11111100 00000000 00000000 00000000 00000000 00000000 00000000
00011111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
00001111 11111000 00000000 00000000 00000000 00000000 00000000 00000000
00001111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
00000111 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000011 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000011 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000001 11100000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000

PS Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠ» свою ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ‚.ΠΊ. Π΅Ρ‘ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ 3×5 пиксСлСй; Ρƒ мСня Π² python shell Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Π΅Π· Π±Ρ€Π΅ΡˆΠ΅ΠΉ, Π½Π΅ знаю ΠΏΠΎΡ‡Π΅ΠΌΡƒ здСсь Ρ‚Π°ΠΊ; МнС 15 Π»Π΅Ρ‚ ΠΌΠΎΠ³Ρƒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, поэтому, поТалуйста, ΠΎΠ±ΡŠΡΡΠ½ΡΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΈ понятнСС. Бпасибо!

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *