GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจœเจพเจฃ เจชเจ›เจพเจฃ

เจจเจฎเจธเจ•เจพเจฐเฅค
เจฌเจนเฉเจค เจธเจฎเจพเจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจœเจฆเฉ‹เจ‚ เจฎเฉˆเจ‚ เจฏเฉ‚เจจเฉ€เจตเจฐเจธเจฟเจŸเฉ€ เจตเจฟเฉฑเจš เจชเฉœเฉเจน เจฐเจฟเจนเจพ เจธเฉ€, "เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฆเฉ‡ เจธเจพเจซเจŸเจตเฉ‡เจ…เจฐ เจขเฉฐเจ—" เจ…เจจเฉเจธเจผเจพเจธเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ•เฉ‹เจฐเจธเจตเจฐเจ• เจธเฉ€เฅค เจ…เจธเจพเจˆเจจเจฎเฉˆเจ‚เจŸ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€ เจœเฉ‹ GIF เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจเจฎเจฌเฉˆเจก เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจœเจพเจตเจพ เจตเจฟเฉฑเจš เจ•เจฐเจจ เจฆเจพ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ.

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเจš เจฎเฉˆเจ‚ เจ•เฉเจ เจธเจฟเจงเจพเจ‚เจคเจ• เจจเฉเจ•เจคเจฟเจ†เจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจพเจ‚เจ—เจพ, เจจเจพเจฒ เจนเฉ€ เจ‡เจน เจ›เฉ‹เจŸเจพ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€.

เจธเจฟเจงเจพเจ‚เจคเจ• เจญเจพเจ—

GIF เจซเจพเจฐเจฎเฉˆเจŸ

GIF (เจ—เฉเจฐเจพเจซเจฟเจ•เจธ เจ‡เฉฐเจŸเจฐเจšเฉ‡เจ‚เจœ เจซเจพเจฐเจฎเฉˆเจŸ - เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจฆเฉ‡ เจ†เจฆเจพเจจ-เจชเฉเจฐเจฆเจพเจจ เจฒเจˆ เจ‡เฉฑเจ• เจซเจพเจฐเจฎเฉˆเจŸ) เจ—เฉเจฐเจพเจซเจฟเจ• เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจซเจพเจฐเจฎเฉˆเจŸ เจนเฉˆ, เจœเฉ‹ 256 เจฐเฉฐเจ—เจพเจ‚ เจคเฉฑเจ• เจฆเฉ‡ เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจ—เฉเจฃเจตเฉฑเจคเจพ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจธเฉฐเจ•เฉเจšเจฟเจค เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฆเฉ‡ เจธเจฎเจฐเฉฑเจฅ เจนเฉˆเฅค เจ‡เจน เจซเจพเจฐเจฎเฉˆเจŸ 1987 (GIF87a) เจตเจฟเฉฑเจš CompuServe เจฆเฉเจ†เจฐเจพ เจจเฉˆเฉฑเจŸเจตเจฐเจ•เจพเจ‚ เจ‰เฉฑเจคเฉ‡ เจฐเจพเจธเจŸเจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจธเจพเจฐเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค 1989 เจตเจฟเฉฑเจš, เจซเจพเจฐเจฎเฉˆเจŸ เจจเฉ‚เฉฐ เจธเฉ‹เจงเจฟเจ† เจ—เจฟเจ† เจธเฉ€ (GIF89a), เจชเจพเจฐเจฆเจฐเจธเจผเจคเจพ เจ…เจคเฉ‡ เจเจจเฉ€เจฎเฉ‡เจธเจผเจจ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค

GIF เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเจฒเจพเจ• เจฌเจฃเจคเจฐ เจนเฉˆเฅค เจ‡เจนเจจเจพเจ‚ เจฌเจฒเจพเจ•เจพเจ‚ เจฆเฉ€ เจนเจฎเฉ‡เจธเจผเจพเจ‚ เจ‡เฉฑเจ• เจจเจฟเจธเจผเจšเจฟเจค เจฒเฉฐเจฌเจพเจˆ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ (เจœเจพเจ‚ เจ‡เจน เจ•เฉเจ เจซเจฒเฉˆเจ—เจพเจ‚ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเจพ เจนเฉˆ), เจ‡เจธ เจฒเจˆ เจนเจฐ เจฌเจฒเจพเจ• เจ•เจฟเฉฑเจฅเฉ‡ เจธเจฅเจฟเจค เจนเฉˆ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจ—เจฒเจคเฉ€ เจ•เจฐเจจเจพ เจฒเจ—เจญเจ— เจ…เจธเฉฐเจญเจต เจนเฉˆเฅค GIF89a เจซเจพเจฐเจฎเฉˆเจŸ เจตเจฟเฉฑเจš เจธเจงเจพเจฐเจจ เจ—เฉˆเจฐ-เจเจจเฉ€เจฎเฉ‡เจŸเจก GIF เจšเจฟเฉฑเจคเจฐ เจฆเฉ€ เจฌเจฃเจคเจฐ:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฌเจฒเจพเจ•เจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚, เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ—เจฒเฉ‹เจฌเจฒ เจชเฉˆเจฒเฉ‡เจŸ เจฌเจฒเจพเจ• เจ…เจคเฉ‡ เจชเฉˆเจฒเฉ‡เจŸ เจฒเจˆ เจœเจผเจฟเฉฐเจฎเฉ‡เจตเจพเจฐ เจฎเจพเจชเจฆเฉฐเจกเจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฒเจตเจพเจ‚เจ—เฉ‡:

  • CT - เจ‡เฉฑเจ• เจ—เจฒเฉ‹เจฌเจฒ เจชเฉˆเจฒเฉ‡เจŸ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€. เจœเฉ‡เจ•เจฐ เจ‡เจน เจซเจฒเฉˆเจ— เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจ—เจฒเฉ‹เจฌเจฒ เจชเฉˆเจฒเฉ‡เจŸ เจฒเจพเจœเจผเฉ€เจ•เจฒ เจธเจ•เฉเจฐเฉ€เจจ เจนเฉˆเจ‚เจกเจฒ เจคเฉ‹เจ‚ เจคเฉเจฐเฉฐเจค เจฌเจพเจ…เจฆ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค
  • Size - เจชเฉˆเจฒเฉ‡เจŸ เจฆเจพ เจ†เจ•เจพเจฐ เจ…เจคเฉ‡ เจคเจธเจตเฉ€เจฐ เจตเจฟเฉฑเจš เจฐเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€เฅค เจ‡เจธ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฒเจˆ เจฎเฉเฉฑเจฒ:

เจ†เจ•เจพเจฐ
เจฐเฉฐเจ—เจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ†
เจชเฉˆเจฒเฉ‡เจŸ เจฆเจพ เจ†เจ•เจพเจฐ, เจฌเจพเจˆเจŸ

7
256
768

6
128
384

5
64
192

4
32
96

3
16
48

2
8
24

1
4
12

0
2
6

เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจขเฉฐเจ—

เจšเจฟเฉฑเจคเจฐ เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจธเฉเจจเฉ‡เจนเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจเจจเจ•เฉเจฐเจฟเจชเจŸ เจ•เจฐเจจ เจฒเจˆ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€:

  • LSB (เจ˜เฉฑเจŸ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจฌเจฟเฉฑเจŸ) เจตเจฟเจงเฉ€
  • เจชเฉˆเจฒเฉ‡เจŸ เจœเฉ‹เฉœเจจ เจฆเจพ เจคเจฐเฉ€เจ•เจพ

LSB เจตเจฟเจงเฉ€ - เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€ เจฆเจพ เจ‡เฉฑเจ• เจ†เจฎ เจคเจฐเฉ€เจ•เจพเฅค เจ‡เจธ เจตเจฟเฉฑเจš เจ•เฉฐเจŸเฉ‡เจจเจฐ เจตเจฟเฉฑเจš เจ†เจ–เจฐเฉ€ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจฌเจฟเฉฑเจŸเจพเจ‚ (เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ—เจฒเฉ‹เจฌเจฒ เจชเฉˆเจฒเฉ‡เจŸ เจฌเจพเจˆเจŸเจธ) เจจเฉ‚เฉฐ เจฒเฉเจ•เจตเฉ‡เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ‡ เจฌเจฟเฉฑเจŸเจพเจ‚ เจจเจพเจฒ เจฌเจฆเจฒเจฃเจพ เจธเจผเจพเจฎเจฒ เจนเฉˆเฅค

เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ‡เจธ เจตเจฟเจงเฉ€ เจฆเฉ‡ เจนเจฟเฉฑเจธเฉ‡ เจตเจœเฉ‹เจ‚ เจ—เจฒเฉ‹เจฌเจฒ เจชเฉˆเจฒเฉ‡เจŸ เจฌเจพเจˆเจŸเจพเจ‚ เจตเจฟเฉฑเจš เจ†เจ–เจฐเฉ€ เจฆเฉ‹ เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‡เจ—เจพเฅค เจ‡เจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจ‡เฉฑเจ• 24-เจฌเจฟเฉฑเจŸ เจšเจฟเฉฑเจคเจฐ เจฒเจˆ, เจœเจฟเฉฑเจฅเฉ‡ เจฐเฉฐเจ— เจชเฉˆเจฒเจ…เจŸ เจฒเจพเจฒ, เจจเฉ€เจฒเฉ‡ เจ…เจคเฉ‡ เจนเจฐเฉ‡ เจฒเจˆ เจคเจฟเฉฐเจจ เจฌเจพเจˆเจŸ เจนเฉˆ, เจ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจเจฎเจฌเฉˆเจก เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจนเจฐเฉ‡เจ• เจฐเฉฐเจ— เจฆเจพ เจนเจฟเฉฑเจธเจพ เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง 3/255 เจ—เฉเจฐเฉ‡เจกเฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจฌเจฆเจฒ เจœเจพเจตเฉ‡เจ—เจพเฅค เจ…เจœเจฟเจนเฉ€ เจคเจฌเจฆเฉ€เจฒเฉ€, เจชเจนเจฟเจฒเจพเจ‚, เจฎเจจเฉเฉฑเจ–เฉ€ เจ…เฉฑเจ– เจฒเจˆ เจ…เจฆเจฟเฉฑเจ– เจœเจพเจ‚ เจฎเฉเจธเจผเจ•เจฒ เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจ…เจคเฉ‡ เจฆเฉ‚เจœเจพ, เจ‡เจน เจ˜เฉฑเจŸ-เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจพเจฒเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจกเจฟเจตเจพเจˆเจธเจพเจ‚ 'เจคเฉ‡ เจฆเจฟเจ–เจพเจˆ เจจเจนเฉ€เจ‚ เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค

เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจธเจฟเฉฑเจงเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจšเจฟเฉฑเจคเจฐ เจชเฉˆเจฒเฉ‡เจŸ เจฆเฉ‡ เจ†เจ•เจพเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเฉ‡เจ—เฉ€เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ เจชเฉˆเจฒเฉ‡เจŸ เจฆเจพ เจ…เจงเจฟเจ•เจคเจฎ เจ†เจ•เจพเจฐ 256 เจฐเฉฐเจ— เจนเฉˆ, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจนเจฐเฉ‡เจ• เจฐเฉฐเจ— เจฆเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš เจฆเฉ‹ เจธเฉฐเจฆเฉ‡เจธเจผ เจฌเจฟเฉฑเจŸ เจฒเจฟเจ–เฉ‡ เจ—เจ เจนเจจ, เจคเจพเจ‚ เจ…เจงเจฟเจ•เจคเจฎ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ เจฒเฉฐเจฌเจพเจˆ (เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจ…เจงเจฟเจ•เจคเจฎ เจชเฉˆเจฒเฉ‡เจŸ เจฆเฉ‡ เจจเจพเจฒ) 192 เจฌเจพเจˆเจŸ เจนเฉˆเฅค เจ‡เฉฑเจ• เจตเจพเจฐ เจœเจฆเฉ‹เจ‚ เจธเฉเจจเฉ‡เจนเจพ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจเจฎเจฌเฉˆเจก เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจซเจพเจˆเจฒ เจฆเจพ เจ†เจ•เจพเจฐ เจจเจนเฉ€เจ‚ เจฌเจฆเจฒเจฆเจพ เจนเฉˆเฅค

เจชเฉˆเจฒเฉ‡เจŸ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเจงเฉ€, เจœเฉ‹ เจธเจฟเจฐเจซเจผ GIF เจขเจพเจ‚เจšเฉ‡ เจฒเจˆ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจ‡เฉฑเจ• เจ›เฉ‹เจŸเฉ‡ เจชเฉˆเจฒเฉ‡เจŸ เจจเจพเจฒ เจšเจฟเฉฑเจคเจฐเจพเจ‚ 'เจคเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพ. เจ‡เจธเจฆเจพ เจธเจพเจฐ เจ‡เจน เจนเฉˆ เจ•เจฟ เจ‡เจน เจชเฉˆเจฒเฉ‡เจŸ เจฆเฉ‡ เจ†เจ•เจพเจฐ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจจเจพเจฒ เจ•เจฒเจฐ เจฌเจพเจˆเจŸเจพเจ‚ เจฆเฉ€ เจฅเจพเจ‚ 'เจคเฉ‡ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจฌเจพเจˆเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจฒเจˆ เจตเจพเจงเฉ‚ เจฅเจพเจ‚ เจฎเจฟเจฒเจฆเฉ€ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจตเจฟเจšเจพเจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจชเฉˆเจฒเฉ‡เจŸ เจฆเจพ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ†เจ•เจพเจฐ 2 เจฐเฉฐเจ— (6 เจฌเจพเจˆเจŸ) เจนเฉˆ, เจคเจพเจ‚ เจเจฎเจฌเฉˆเจก เจ•เฉ€เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเจพ เจ…เจงเจฟเจ•เจคเจฎ เจ†เจ•เจพเจฐ 256 ร— 3โ€“6 = 762 เจฌเจพเจˆเจŸ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจจเฉเจ•เจธเจพเจจ เจ˜เฉฑเจŸ เจ•เฉเจฐเจฟเจชเจŸเฉ‹เจ—เฉเจฐเจพเจซเจฟเจ• เจธเฉเจฐเฉฑเจ–เจฟเจ† เจนเฉˆ; เจเจฎเจฌเฉˆเจก เจ•เฉ€เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจŸเฉˆเจ•เจธเจŸ เจเจกเฉ€เจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเฉœเฉเจนเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเฉ‡เจ•เจฐ เจธเฉเจจเฉ‡เจนเจพ เจตเจพเจงเฉ‚ เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฆเฉ‡ เจ…เจงเฉ€เจจ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจตเจฟเจนเจพเจฐเจ• เจนเจฟเฉฑเจธเจพ

เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจกเจฟเจœเจผเจพเจˆเจจ

เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจ…เจคเฉ‡ เจกเฉ€เจ•เฉเจฐเจฟเจชเจธเจผเจจ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฒเจˆ เจธเจพเจฐเฉ‡ เจœเจผเจฐเฉ‚เจฐเฉ€ เจธเจพเจงเจจ เจชเฉˆเจ•เฉ‡เจœ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจœเจพเจฃเจ—เฉ‡ com.tsarik.steganography. เจ‡เจธ เจชเฉˆเจ•เฉ‡เจœ เจตเจฟเฉฑเจš เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจธเจผเจพเจฎเจฒ เจนเฉˆ Encryptor เจขเฉฐเจ— เจจเจพเจฒ encrypt ะธ decrypt, เจ•เจฒเจพเจธ Binary, เจœเฉ‹ เจ•เจฟ เจฌเจฟเฉฑเจŸ เจเจฐเฉ‡ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจ…เจชเจตเจพเจฆ เจ•เจฒเจพเจธเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆ UnableToEncryptException ะธ UnableToDecryptException, เจœเจฟเจธเจจเฉ‚เฉฐ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจตเจฐเจคเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ Encryptor เจ•เฉเจฐเจฎเจตเจพเจฐ เจเจจเจ•เฉ‹เจกเจฟเฉฐเจ— เจ…เจคเฉ‡ เจกเฉ€เจ•เฉ‹เจกเจฟเฉฐเจ— เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจšเฅค

เจฎเฉเฉฑเจ– เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจชเฉˆเจ•เฉ‡เจœ com.tsarik.programs.gifed เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจตเจฟเจงเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจšเฉฑเจฒเจฃเจฏเฉ‹เจ— เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจ•เจฒเจพเจธ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‡เจ—เจพ main, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจธเจนเจพเจ‡เจ• เจนเฉˆ; เจ‡เฉฑเจ• เจ•เจฒเจพเจธ เจœเฉ‹ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ; เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจ•เจฒเจพเจธเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉˆเจ•เฉ‡เจœเฅค

เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจ–เฉเจฆ เจชเฉˆเจ•เฉ‡เจœ เจตเจฟเฉฑเจš เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ com.tsarik.programs.gifed.gif เจ•เจฒเจพเจธเจพเจ‚ GIFEncryptorByLSBMethod ะธ GIFEncryptorByPaletteExtensionMethod. เจ‡เจน เจฆเฉ‹เจตเฉ‡เจ‚ เจ•เจฒเจพเจธเจพเจ‚ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจ—เฉ€เจ†เจ‚ Encryptor.

GIF เจซเจพเจฐเจฎเฉˆเจŸ เจฆเฉ€ เจฌเจฃเจคเจฐ เจฆเฉ‡ เจ…เจงเจพเจฐ 'เจคเฉ‡, เจคเฉเจธเฉ€เจ‚ เจšเจฟเฉฑเจคเจฐ เจชเฉˆเจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจชเฉ‡เจธเจผ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจ†เจฎ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ เจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฒเจˆ, เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค เจตเจฟเฉฑเจš เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจ–เจพเจธ เจ•เฉเจฐเจฎ เจœเฉ‹เฉœเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ, เจœเจฟเจธ เจจเฉ‚เฉฐ เจกเฉ€เจ•เฉ‹เจกเจฐ เจชเจนเจฟเจฒเจพเจ‚ เจชเฉœเฉเจนเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจผเฉเฉฑเจงเจคเจพ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ‡เจน เจฎเฉ‡เจฒ เจจเจนเฉ€เจ‚ เจ–เจพเจ‚เจฆเจพ, เจคเจพเจ‚ เจ‡เจน เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš เจ•เฉ‹เจˆ เจฒเฉเจ•เจฟเจ† เจนเฉ‹เจ‡เจ† เจธเฉเจจเฉ‡เจนเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ…เฉฑเจ—เฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ€ เจฒเฉฐเจฌเจพเจˆ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ. เจซเจฟเจฐ เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเจพ เจชเจพเจ  เจนเฉ€เฅค

เจชเฉ‚เจฐเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเจพ เจ•เจฒเจพเจธ เจกเจพเจ‡เจ—เจฐเจพเจฎ:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ

เจชเฉ‚เจฐเฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจจเฉ‚เฉฐ เจฆเฉ‹ เจนเจฟเฉฑเจธเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจตเฉฐเจกเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ: เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจ‡เจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจ…เจคเฉ‡ เจกเฉ€เจ•เฉเจฐเจฟเจชเจธเจผเจจ เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ Encryptor, เจ•เจฒเจพเจธเจพเจ‚ เจตเจฟเฉฑเจš GIFEncryptorByLSBMethod ะธ GIFEncryptorByPaletteExtensionMethod, เจ…เจคเฉ‡ เจฏเฉ‚เจœเจผเจฐ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพเฅค

เจ•เจฒเจพเจธ 'เจคเฉ‡ เจ—เฉŒเจฐ เจ•เจฐเฉ‹ GIFEncryptorByLSBMethod.

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจ–เฉ‡เจคเจฐ firstLSBit ะธ secondLSBit เจšเจฟเฉฑเจคเจฐ เจฆเฉ‡ เจนเจฐเฉ‡เจ• เจฌเจพเจˆเจŸ เจฆเฉ‡ เจฌเจฟเฉฑเจŸเจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เจฟเจ† เจฐเฉฑเจ–เจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเฉเจจเฉ‡เจนเจพ เจฆเจพเจ–เจฒ เจ•เฉ€เจคเจพ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจœเจฟเฉฑเจฅเฉ‹เจ‚ เจธเฉเจจเฉ‡เจนเจพ เจชเฉœเฉเจนเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจ–เฉ‡เจคเจฐ checkSequence เจเจฎเจฌเฉˆเจกเจก เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเฉ€ เจฎเจพเจจเจคเจพ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจšเฉˆเจ• เจฌเจฟเฉฑเจŸ เจ•เฉเจฐเจฎ เจธเจŸเฉ‹เจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจฅเจฟเจฐ เจขเฉฐเจ— getEncryptingFileParameters เจจเจฟเจฐเจงเจพเจฐเจค เจซเจพเจˆเจฒ เจฆเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจ…เจคเฉ‡ เจธเฉฐเจญเจพเจตเฉ€ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจตเจพเจชเจธ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจตเจฟเจงเฉ€ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ encrypt เจ•เจฒเจพเจธ GIFEncryptorByLSBMethod:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจ…เจคเฉ‡ เจ‰เจธเจฆเจพ เจ•เฉ‹เจก:

@Override
public void encrypt(File in, File out, String text) throws UnableToEncodeException, NullPointerException, IOException {
	if (in == null) {
		throw new NullPointerException("Input file is null");
	}
	if (out == null) {
		throw new NullPointerException("Output file is null");
	}
	if (text == null) {
		throw new NullPointerException("Text is null");
	}
	
	// read bytes from input file
	byte[] bytes = new byte[(int)in.length()];
	InputStream is = new FileInputStream(in);
	is.read(bytes);
	is.close();
	
	// check format
	if (!(new String(bytes, 0, 6)).equals("GIF89a")) {
		throw new UnableToEncodeException("Input file has wrong GIF format");
	}
	
	// read palette size property from first three bits in the 10-th byte from the file
	byte[] b10 = Binary.toBitArray(bytes[10]);
	byte bsize = Binary.toByte(new byte[] {b10[0], b10[1], b10[2]});
	
	// calculate color count and possible message length
	int bOrigColorCount = (int)Math.pow(2, bsize+1);
	int possibleMessageLength = bOrigColorCount*3/4;
	int possibleTextLength = possibleMessageLength-2;// one byte for check and one byte for message length
	
	if (possibleTextLength < text.length()) {
		throw new UnableToEncodeException("Text is too big");
	}
	
	int n = 13;
	
	// write check sequence
	for (int i = 0; i < checkSequence.length/2; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		ba[firstLSBit] = checkSequence[2*i];
		ba[secondLSBit] = checkSequence[2*i+1];
		bytes[n] = Binary.toByte(ba);
		n++;
	}
	
	// write text length
	byte[] cl = Binary.toBitArray((byte)text.length());
	for (int i = 0; i < cl.length/2; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		ba[firstLSBit] = cl[2*i];
		ba[secondLSBit] = cl[2*i+1];
		bytes[n] = Binary.toByte(ba);
		n++;
	}
	
	// write message
	byte[] textBytes = text.getBytes();
	for (int i = 0; i < textBytes.length; i++) {
		byte[] c = Binary.toBitArray(textBytes[i]);
		for (int ci = 0; ci < c.length/2; ci++) {
			byte[] ba = Binary.toBitArray(bytes[n]);
			ba[firstLSBit] = c[2*ci];
			ba[secondLSBit] = c[2*ci+1];
			bytes[n] = Binary.toByte(ba);
			n++;
		}
	}
	
	// write output file
	OutputStream os = new FileOutputStream(out);
	os.write(bytes);
	os.close();
}

เจตเจฟเจงเฉ€ เจฆเจพ เจเจฒเจ—เฉ‹เจฐเจฟเจฆเจฎ เจ…เจคเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก decrypt เจ•เจฒเจพเจธ GIFEncryptorByLSBMethod:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

@Override
public String decrypt(File in) throws UnableToDecodeException, NullPointerException, IOException {
	if (in == null) {
		throw new NullPointerException("Input file is null");
	}
	
	// read bytes from input file
	byte[] bytes = new byte[(int)in.length()];
	InputStream is = new FileInputStream(in);
	is.read(bytes);
	is.close();
	
	// check format
	if (!(new String(bytes, 0, 6)).equals("GIF89a")) {
		throw new UnableToDecodeException("Input file has wrong GIF format");
	}
	
	// read palette size property from first three bits in the 10-th byte from the file
	byte[] b10 = Binary.toBitArray(bytes[10]);
	byte bsize = Binary.toByte(new byte[] {b10[0], b10[1], b10[2]});
	
	// calculate color count and possible message length
	int bOrigColorCount = (int)Math.pow(2, bsize+1);
	int possibleMessageLength = bOrigColorCount*3/4;
	int possibleTextLength = possibleMessageLength-2;	// one byte for check and one byte for message length
	
	int n = 13;
	
	// read check sequence
	byte[] csBits = new byte[checkSequence.length];
	for (int i = 0; i < 4; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		csBits[2*i] = ba[firstLSBit];
		csBits[2*i+1] = ba[secondLSBit];
		n++;
	}
	byte cs = Binary.toByte(csBits);
	
	if (cs != Binary.toByte(checkSequence)) {
		throw new UnableToDecodeException("There is no encrypted message in the image (Check sequence is incorrect)");
	}
	
	// read text length
	byte[] cl = new byte[8];
	for (int i = 0; i < 4; i++) {
		byte[] ba = Binary.toBitArray(bytes[n]);
		cl[2*i] = ba[firstLSBit];
		cl[2*i+1] = ba[secondLSBit];
		n++;
	}
	byte textLength = Binary.toByte(cl);
	
	if (textLength < 0) {
		throw new UnableToDecodeException("Decoded text length is less than 0");
	}
	if (possibleTextLength < textLength) {
		throw new UnableToDecodeException("There is no messages (Decoded message length (" + textLength + ") is less than Possible message length (" + possibleTextLength + "))");
	}
	
	// read text bits and make text bytes
	byte[] bt = new byte[textLength];
	for (int i = 0; i < bt.length; i++) {
		byte[] bc = new byte[8];
		for (int bci = 0; bci < bc.length/2; bci++) {
			byte[] ba = Binary.toBitArray(bytes[n]);
			bc[2*bci] = ba[firstLSBit];
			bc[2*bci+1] = ba[secondLSBit];
			n++;
		}
		bt[i] = Binary.toByte(bc);
	}
	
	return new String(bt);
}

เจ•เจฒเจพเจธ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ GIFEncryptorByPaletteExtensionMethod เจธเจฎเจพเจจ เจนเฉ‹เจตเฉ‡เจ—เจพ, เจธเจฟเจฐเจซ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจธเฉฐเจญเจพเจฒเจฃ/เจชเฉœเฉเจนเจจ เจฆเจพ เจคเจฐเฉ€เจ•เจพ เจตเฉฑเจ–เจฐเจพ เจนเฉˆเฅค

เจ•เจฒเจพเจธ เจตเจฟเฉฑเจš MainFrame เจฐเฉˆเจชเจฐ เจตเจฟเจงเฉ€เจ†เจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ: encryptImage(Encryptor encryptor) ะธ decryptImage(Encryptor encryptor), เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจฆเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ Encryptor เจ…เจคเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเจพเจฒ เจ—เฉฑเจฒเจฌเจพเจค เจ•เจฐเจจเจพ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจšเฉ‹เจฃ เจกเจพเจ‡เจฒเจพเจ— เจ–เฉ‹เจฒเฉเจนเจฃเจพ, เจ—เจฒเจคเฉ€ เจธเฉเจจเฉ‡เจนเฉ‡ เจฆเจฟเจ–เจพเจ‰เจฃเจพ, เจ†เจฆเจฟ; เจฆเฉ‡ เจจเจพเจฒ เจจเจพเจฒ เจนเฉ‹เจฐ เจขเฉฐเจ—: openImage(), เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจšเฉเจฃเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, exit(), เจœเฉ‹ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจจเจฟเจ•เจฒเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจขเฉฐเจ— เจคเฉฑเจ• เจฌเฉเจฒเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ Actionเจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐเฉ€ เจฎเฉ‡เจจเฉ‚ เจ†เจˆเจŸเจฎเจพเจ‚เฅค เจ‡เจน เจ•เจฒเจพเจธ เจธเจนเจพเจ‡เจ• เจตเจฟเจงเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจตเฉ€ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ: createComponents() - เจซเจพเจฐเจฎ เจฆเฉ‡ เจญเจพเจ—เจพเจ‚ เจฆเฉ€ เจฐเจšเจจเจพ, loadImageFile(File f) โ€” เจ‡เฉฑเจ• เจซเจพเจ‡เจฒ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจ–เจพเจธ เจญเจพเจ— เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจฒเฉ‹เจก เจ•เจฐเจจเจพเฅค เจ•เจฒเจพเจธ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ GIFEncryptorByPaletteExtensionMethod เจตเจฐเจ— เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉˆ GIFEncryptorByLSBMethod, เจฎเฉเฉฑเจ– เจ…เฉฐเจคเจฐ เจชเฉˆเจฒเฉ‡เจŸ เจคเฉ‹เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผ เจฌเจพเจˆเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจฟเจ–เฉ‡ เจ…เจคเฉ‡ เจชเฉœเฉเจนเฉ‡ เจœเจพเจฃ เจฆเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจตเจฟเฉฑเจš เจนเฉˆเฅค

เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจฆเฉ€ เจ•เจพเจฐเจตเจพเจˆ

LBS เจตเจฟเจงเฉ€

เจฎเฉฐเจจ เจฒเจ“ เจ•เจฟ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจคเจธเจตเฉ€เจฐ เจนเฉˆ:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจ‡เจธ เจšเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจš, เจชเฉˆเจฒเฉ‡เจŸ เจตเจฟเฉฑเจš 256 เจฐเฉฐเจ— เจนเจจ (เจœเจฟเจตเฉ‡เจ‚ เจชเฉ‡เจ‚เจŸ เจธเฉ‡เจต เจ•เจฐเจฆเจพ เจนเฉˆ)เฅค เจชเจนเจฟเจฒเฉ‡ เจšเจพเจฐ เจฐเฉฐเจ— เจนเจจ: เจšเจฟเฉฑเจŸเจพ, เจ•เจพเจฒเจพ, เจฒเจพเจฒ, เจนเจฐเจพเฅค เจนเฉ‹เจฐ เจฐเฉฐเจ— เจ•เจพเจฒเฉ‡ เจนเจจเฅค เจ—เจฒเฉ‹เจฌเจฒ เจชเฉˆเจฒเฉ‡เจŸ เจฌเจฟเฉฑเจŸ เจ•เฉเจฐเจฎ เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพ:

11111111 11111111 11111111 00000000 00000000 00000000 11111111 00000000 00000000 00000000 11111111 00000000...

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจ‡เฉฑเจ• เจตเจพเจฐ เจธเฉเจจเฉ‡เจนเจพ เจเจฎเจฌเฉˆเจก เจนเฉ‹ เจœเจพเจฃ 'เจคเฉ‡, เจ…เฉฐเจกเจฐเจฒเจพเจˆเจจ เจ•เฉ€เจคเฉ‡ เจฌเจฟเฉฑเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ‡ เจฌเจฟเฉฑเจŸเจพเจ‚ เจจเจพเจฒ เจฌเจฆเจฒ เจฆเจฟเฉฑเจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจจเจคเฉ€เจœเจพ เจšเจฟเฉฑเจคเจฐ เจ…เจธเจฒ เจคเฉ‹เจ‚ เจฒเจ—เจญเจ— เจตเฉฑเจ–เจฐเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ.

เจ…เจธเจฒเฉ€
เจเจฎเจฌเฉˆเจก เจ•เฉ€เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ‡ เจจเจพเจฒ เจšเจฟเฉฑเจคเจฐ

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€
GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจชเฉˆเจฒเฉ‡เจŸ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเจงเฉ€

เจœเจฆเฉ‹เจ‚ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ‡เฉฑเจ• เจธเฉฐเจฆเฉ‡เจธเจผ เจตเจพเจฒเจพ เจšเจฟเฉฑเจคเจฐ เจ–เฉ‹เจฒเฉเจนเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ€ เจคเจธเจตเฉ€เจฐ เจตเฉ‡เจ–เฉ‹เจ—เฉ‡:

GIF เจตเจฟเฉฑเจš เจธเจŸเฉˆเจ—เจจเฉ‹เจ—เฉเจฐเจพเจซเฉ€

เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ เจ‡เจน เจตเจฟเจงเฉ€ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจœเจพเจธเฉ‚เจธเฉ€ เจ—เจคเฉ€เจตเจฟเจงเฉ€เจ†เจ‚ เจฒเจˆ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเฉ‡เจ—เฉ€, เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจฆเฉ‡ เจตเจพเจงเฉ‚ เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจเจจเฉ€เจฎเฉ‡เจŸเจก เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจเจจเจ•เฉเจฐเจฟเจชเจธเจผเจจ/เจกเจฟเจ•เฉเจฐเจฟเจชเจธเจผเจจ เจจเจฟเจฏเจฎเจค เจธเจฅเจฟเจฐ เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจตเจพเจ‚เจ— เจนเฉ€ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจเจจเฉ€เจฎเฉ‡เจธเจผเจจ เจŸเฉเฉฑเจŸเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจตเจฐเจคเฉ‡ เจ—เจ เจธเจฐเฉ‹เจค:

เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ‹:

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹