แƒกแƒขแƒ”แƒ’แƒแƒœแƒแƒ’แƒ แƒแƒคแƒ˜แƒ GIF-แƒจแƒ˜

แƒจแƒ”แƒกแƒแƒ•แƒแƒšแƒ˜

แƒกแƒแƒšแƒแƒ›แƒ˜.
แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ“แƒ˜แƒ“แƒ˜ แƒฎแƒœแƒ˜แƒก แƒฌแƒ˜แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฃแƒœแƒ˜แƒ•แƒ”แƒ แƒกแƒ˜แƒขแƒ”แƒขแƒจแƒ˜ แƒ•แƒกแƒฌแƒแƒ•แƒšแƒแƒ‘แƒ“แƒ˜, แƒ˜แƒงแƒ แƒ™แƒฃแƒ แƒกแƒ˜ แƒ“แƒ˜แƒกแƒชแƒ˜แƒžแƒšแƒ˜แƒœแƒแƒจแƒ˜ "แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ˜". แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒ—แƒฎแƒแƒ•แƒ“แƒ แƒจแƒ”แƒ’แƒ•แƒ”แƒฅแƒ›แƒœแƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก GIF แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒจแƒ˜ แƒฉแƒแƒ“แƒ”แƒ‘แƒก. แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ แƒฏแƒแƒ•แƒแƒจแƒ˜.

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ›แƒ” แƒแƒฆแƒ•แƒฌแƒ”แƒ  แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ—แƒ”แƒแƒ แƒ˜แƒฃแƒš แƒžแƒฃแƒœแƒฅแƒขแƒก, แƒแƒกแƒ”แƒ•แƒ” แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒ”แƒก แƒžแƒแƒขแƒแƒ แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ.

แƒ—แƒ”แƒแƒ แƒ˜แƒฃแƒšแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜

GIF แƒคแƒแƒ แƒ›แƒแƒขแƒ˜

GIF (Graphics Interchange Format - แƒ’แƒแƒ›แƒแƒกแƒแƒฎแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜) แƒแƒ แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒ˜ แƒคแƒแƒ แƒ›แƒแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒก แƒจแƒ”แƒ™แƒฃแƒ›แƒจแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ˜แƒก แƒ“แƒแƒ™แƒแƒ แƒ’แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ” 256 แƒคแƒ”แƒ แƒแƒ›แƒ“แƒ” แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜. แƒ”แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ 1987 แƒฌแƒ”แƒšแƒก (GIF87a) CompuServe-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒฅแƒกแƒ”แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ แƒแƒกแƒขแƒ แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒชแƒ”แƒ›แƒแƒ“. 1989 แƒฌแƒ”แƒšแƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒแƒšแƒ (GIF89a), แƒ“แƒแƒ”แƒ›แƒแƒขแƒ แƒ’แƒแƒ›แƒญแƒ•แƒ˜แƒ แƒ•แƒแƒšแƒแƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒแƒœแƒ˜แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ.

GIF แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก แƒแƒฅแƒ•แƒ— แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ. แƒแƒ› แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒก แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒแƒฅแƒ•แƒ— แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒ’แƒ แƒซแƒ” (แƒแƒœ แƒ”แƒก แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒ“แƒ แƒแƒจแƒแƒ–แƒ”), แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒกแƒแƒ“ แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ‘แƒšแƒแƒ™แƒ˜. แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒแƒ แƒแƒแƒœแƒ˜แƒ›แƒแƒชแƒ˜แƒฃแƒ แƒ˜ GIF แƒกแƒฃแƒ แƒแƒ—แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ GIF89a แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜:

แƒกแƒขแƒ”แƒ’แƒแƒœแƒแƒ’แƒ แƒแƒคแƒ˜แƒ 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 แƒคแƒ”แƒ แƒ˜แƒกแƒ’แƒแƒœ (แƒ แƒแƒ’แƒแƒ แƒช Paint แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก). แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ—แƒฎแƒ˜ แƒคแƒ”แƒ แƒ˜แƒ: แƒ—แƒ”แƒ—แƒ แƒ˜, แƒจแƒแƒ•แƒ˜, แƒฌแƒ˜แƒ—แƒ”แƒšแƒ˜, แƒ›แƒฌแƒ•แƒแƒœแƒ”. แƒกแƒฎแƒ•แƒ แƒคแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒจแƒแƒ•แƒ˜แƒ. แƒ’แƒšแƒแƒ‘แƒแƒšแƒฃแƒ แƒ˜ แƒžแƒแƒšแƒ˜แƒขแƒ แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜:

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

แƒกแƒขแƒ”แƒ’แƒแƒœแƒแƒ’แƒ แƒแƒคแƒ˜แƒ GIF-แƒจแƒ˜

แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒฎแƒแƒ–แƒ’แƒแƒกแƒ›แƒฃแƒšแƒ˜ แƒ‘แƒ˜แƒขแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒขแƒ˜แƒ—. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒแƒ  แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒ˜แƒกแƒ’แƒแƒœ.

Original
แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒฉแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒกแƒขแƒ”แƒ’แƒแƒœแƒแƒ’แƒ แƒแƒคแƒ˜แƒ GIF-แƒจแƒ˜
แƒกแƒขแƒ”แƒ’แƒแƒœแƒแƒ’แƒ แƒแƒคแƒ˜แƒ GIF-แƒจแƒ˜

แƒžแƒแƒšแƒ˜แƒขแƒ แƒ˜แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜

แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ› แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ— แƒฎแƒกแƒœแƒ˜แƒ— แƒกแƒฃแƒ แƒแƒ—แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก, แƒœแƒแƒฎแƒแƒ•แƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒกแƒฃแƒ แƒแƒ—แƒก:

แƒกแƒขแƒ”แƒ’แƒแƒœแƒแƒ’แƒ แƒแƒคแƒ˜แƒ GIF-แƒจแƒ˜

แƒœแƒแƒ—แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ› แƒ”แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒแƒ  แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒฏแƒแƒจแƒฃแƒจแƒฃแƒ แƒ˜ แƒกแƒแƒฅแƒ›แƒ˜แƒแƒœแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ.

แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ/แƒ’แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ แƒแƒœแƒ˜แƒ›แƒแƒชแƒ˜แƒฃแƒ  แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒจแƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ˜แƒกแƒ”แƒ•แƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ  แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒจแƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒœแƒ˜แƒ›แƒแƒชแƒ˜แƒ แƒแƒ  แƒแƒ แƒ˜แƒก แƒ’แƒแƒขแƒ”แƒฎแƒ˜แƒšแƒ˜.

แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒ˜:

แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ:

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ