рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдЖрдИрдЯреА рдХреЗ рдЧреИрд░-рдорд╛рдирдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд╣реИрд╢, рдЫрд╡рд┐ рддреБрд▓рдирд╛ = рд▓рд╛рдЧрдд рдЕрдиреБрдХреВрд▓рди

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╣рд╛рдиреА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдИ рдереАред рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, "рд╕рд┐рд░реНрдл рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП" рдФрд░ рд╢реБрджреНрдз рд╢реИрдХреНрд╖рдгрд┐рдХ рд╣рд┐рдд рдХреЗ рдмрд╛рд╣рд░ ...
рдпрд╣ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдерд╛, рдмрд╕ рдЦрд╛рд▓реА рд╕рдордп рдерд╛ рдФрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереАред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреМрджреНрдзрд┐рдХ рднреВрдЦ рдФрд░ рдХреБрдЫ рдирдпрд╛, рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рдХреА рддреАрд╡реНрд░ рдХрдореА рдереА ... рдЗрд╕рд▓рд┐рдП рдмрд╛рдЗрдХ рдХреЛ рдЫрдбрд╝реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ ... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕реА рдмрд╛рдЗрдХ рд╕рдм рдХреБрдЫ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИ ...

1. рдЪреБрдиреМрддреА


рдПрдХ рдЯреНрд░реЗрдбрд┐рдВрдЧ рдФрд░ рдХреНрд░рдп рдЙрджреНрдпрдо рдореЗрдВ, рдЦрд░реАрдж рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдореБрджреНрджрд╛ рддреАрд╡реНрд░ рдерд╛ред рдХрдВрдкрдиреА рдХреЗ рдХрдИ рдкреНрд░рдореБрдЦ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдереЗ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХрдИ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдореЗрдВ 20-30% рдХреЗ рдкрд╛рд░ рдорд╛рд▓ рдереЗ, рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдХреАрдорддреЗрдВ рдЕрд▓рдЧ рдереАрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдорд╛рди "рдкреБрд░рд╛рдиреА рдореЗрдореЛрд░реА рд╕реЗ" рдЦрд░реАрджреЗ рдЧрдП рдереЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдореВрд╣ рдП рдХреЗ рд╕рд╛рдорд╛рди рдХреЛ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдПрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рдореВрд╣ рдмреА рдХреЗ рд╕рд╛рдорд╛рди рдХреА рдЖрдкреВрд░реНрддрд┐ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рд╡рд╛рдИ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдЖрдк рд╕рдореВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдорд╛рд▓ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдереЛрдбрд╝рд╛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛:

  рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ X:
 рдЙрддреНрдкрд╛рдж A1 - 11 рд░реВрдмрд▓ред
 рдЙрддреНрдкрд╛рдж рдП 2 - 10 рд░реВрдмрд▓ред
 рдЙрддреНрдкрд╛рдж рдмреА 1 - 10 рд░реВрдмрд▓ред
 рдЙрддреНрдкрд╛рдж рдмреА 2 - 11 рд░реВрдмрд▓ред

 рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ Y:
 рдЙрддреНрдкрд╛рдж A1 - 10 рд░реВрдмрд▓ред
 рдЙрддреНрдкрд╛рдж рдП 2 - 11 рд░реВрдмрд▓ред
 рдЙрддреНрдкрд╛рдж рдмреА 1 - 11 рд░реВрдмрд▓ред
 рдЙрддреНрдкрд╛рдж рдмреА 2 - 10.5 рд░реВрдмрд▓ред

рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ A1 рдФрд░ B2 "Y", рдФрд░ A2 рдФрд░ B2 рд╕реЗ "X" рдЦрд░реАрджрдирд╛ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдирд╛рдордХрд░рдг рдФрд░ 2 рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдХреЗ 4 рдЖрдЗрдЯрдореЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрд╕рд╛рди рдФрд░ рд╕рд░рд▓ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдЗрдЯрдо рд╣рдЬрд╛рд░реЛрдВ рдЖрдЗрдЯрдореЛрдВ рдХреЗ рджрд╕рд┐рдпреЛрдВ рдФрд░ рдХреБрд▓ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдХреЗ рджрд░реНрдЬрдиреЛрдВ рдХрд╛ рдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд▓ рдЧрдгрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЙрд▓реНрдпреВрдо рдЖрдкрдХреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдирд╣реАрдВ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреАрд╕реА рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╕рдм рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╕рднреА рдирд╛рдордХрд░рдг рдФрд░ рдХреАрдорддреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЖрдзрд╛рд░ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕, рдпрд╣ рдПрдХ рдпреВрдЯреЛрдкрд┐рдпрд╛ рд╣реИ ... рдЖрдзрд╛рд░ рдПрдХ рдХрдЪрд░реЗ рдХреЗ рдвреЗрд░ рдХреА рд╕рд╛рдорд╛рдиреНрдп, рднрдпрд╛рдирдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╣рд░ рджрд┐рди рдЬреЛ рд▓реЛрдЧ рдХрдЪрд░реЗ рдХреЗ рдЗрд╕ рдвреЗрд░ рдХреЛ рдлреЗрдВрдХрддреЗ рдереЗ, рд╡реЗ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рдереЗред рдХреАрдорддреЗрдВ рдФрд░ рднреА рдмрджрддрд░ рд╣реИрдВ, рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХреИрдЯрд▓реЙрдЧ, рдХреАрдорддреЛрдВ, рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рдлреИрд▓реЗ рд╣реБрдП рд╣реИрдВред рдЬрдм рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдХреИрдЯрд▓реЙрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдиреНрдпреБрдЕрд▓ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдПрдХ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбрд╛рд▓рддрд╛ рд╣реИ, рдФрд░ рддреАрд╕рд░рд╛ рдЙрдиреНрд╣реЗрдВ рдореВрд▓реНрдп рд╕реВрдЪреА рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╛рдо рдХрд╣реАрдВ рднреА рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдЙрддреНрдкрд╛рдж рдХреЛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдПрдХ рддреНрд░рд┐рдХреЛрдгреАрдп рдкреИрдЯрд░реНрди рдХреА рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рдлреВрд▓рджрд╛рди", "рдлреВрд▓рджрд╛рди рдП -563", "рдПрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рд╕рд╛рде рдлреВрд▓рдирд╛", рдЕрдВрдд рдореЗрдВ, рдмрд╕ "рдлреВрд▓" :)
рдЗрд╕рд▓рд┐рдП, рдирд╛рдо рд╕реЗ, рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рднреА рдмрд┐рд▓реНрдХреБрд▓ рдмреЗрдХрд╛рд░ рдерд╛ред

2. рдкрд╛рдЧрд▓ рд╡рд┐рдЪрд╛рд░


рдФрд░ рдлрд┐рд░ рдПрдХ рдкрд╛рдЧрд▓ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред рдЙрддреНрдкрд╛рдж рдХреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдРрд╕реА рдереАрдВ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рддрд╕реНрд╡реАрд░ рдереА, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рднреА рддрд╕реНрд╡реАрд░реЗрдВ рд▓реАрдВред рдПрдХ "рдмреНрдпреВрдЯ" рдерд╛, рдЪрд┐рддреНрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдереЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдиреБрдкрд╛рдд рднреА рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рдереЗред рдЗрд╕рд▓рд┐рдП рддреБрд▓рдирд╛ "рдорд╛рдереЗ рдкрд░" рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди, рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╛рдВрдбреЗрдХреНрд╕ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рдЫрд╡рд┐рдпрд╛рдВ рдкрд╛рддрд╛ рд╣реИ? рд╣рдо рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЖрдЬрдорд╛рддреЗ?! рд╣рд▓!

рд╕рд╛рд╣рд┐рддреНрдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, Google, рд▓реЗрдЦреЛрдВ рдХреЛ рдкрдврд╝рдХрд░, рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╝рд╛ рд╣реБрдЖ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХреА рдЫрд╡рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╣реИрд╢ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣реИрд╢ рдХреА рддреБрд▓рдирд╛ рдФрд░ рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИрд╢ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдФрд░ рдЧрдгрдирд╛ рдХреА рдмрд╣реБрдд рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝, рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд╣реИрд╢ рд╣реИ "рдФрд╕рдд рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛"ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд: рдЫрд╡рд┐ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдЪреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 16x16, рдлрд┐рд░ рд╣рдо рдЫрд╡рд┐ рдХреЛ рд░рдВрдЧреАрди рдЫрд╡рд┐ рд╕реЗ рдЧреНрд░реЗрд╕реНрдХреЗрд▓ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░, рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдкрд░, рд╣рдо рдФрд╕рдд рд░рдВрдЧ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рдкрд╛рд╕ рдореЗрдВ рд╣рдо 0 рдпрд╛ 1 рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдХрд╛ рд░рдВрдЧ рдФрд╕рдд рдореВрд▓реНрдп рд╕реЗ рдХрдо рдпрд╛ рдЕрдзрд┐рдХ рд╣реИред 0 рдФрд░ 1 рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рдХреНрд░рдо рд╡рд╣ рд╣реИрд╢ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдо рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ php рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдорд╛рдирдХ рд╕реЗрдЯ рд╕реЗ "рдХреНрд░рд┐рд╕реЗрдВрдЯрд╣реИрдо.рдЬреЗрдкреАрдЬреА" рдЫрд╡рд┐ рд▓реАред рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ test1.jpg рдХрд╣рд╛ рдерд╛, рдлрд┐рд░ рдореИрдВрдиреЗ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рд▓реА рдФрд░ рдЕрдиреБрдкрд╛рдд рдХреЛ рд╡рд┐рдХреГрдд рдХрд░ рджрд┐рдпрд╛, рдЗрд╕реЗ test2.jpg рдирд╛рдо рд╕реЗ рд╕рд╣реЗрдЬрд╛ред рддреАрд╕рд░реЗ рдирдореВрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ "рдбреЗрдЬрд░реНрдЯ.рдЬреЗрдкреАрдЬреА" рд▓рд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ test3.jpg рдирд╛рдо рджрд┐рдпрд╛ред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░





рдЕрдЧрд▓рд╛, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП ImageMagick рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ:
E:\ImageMagick\convert.exe E:\Article\img\test1.jpg -resize 16x16! -colorspace gray E:\Article\img\_test1.jpg E:\ImageMagick\convert.exe E:\Article\img\test2.jpg -resize 16x16! -colorspace gray E:\Article\img\_test2.jpg E:\ImageMagick\convert.exe E:\Article\img\test3.jpg -resize 16x16! -colorspace gray E:\Article\img\_test3.jpg 


рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЫрд╡рд┐рдпрд╛рдБ 16x16 рдЧреНрд░реЗрд╕реНрдХреЗрд▓





рдЕрдЧрд▓рд╛, рд╣рдо рдЦреБрдж рдХреЛ рд╣реИрд╢ рдорд╛рдирддреЗ рд╣реИрдВ:
 <? function getPerceptHash($imgName) { $im = imagecreatefromjpeg($imgName); //    ,     256 (16*16),     $summ = 0; for($i=0;$i<8;$i++){ for($j=0;$j<8;$j++){ $summ += imagecolorat($im, $i, $j); } } $sred = $summ/64; //               0  1 $str=''; for($i=0;$i<8;$i++){ for($j=0;$j<8;$j++){ if(imagecolorat($im, $i, $j)>=$sred){ $str .= '1'; }else{ $str .= '0'; } } } //  16- ,   $str = base_convert($str, 2, 16); return $str; } echo '_test1.jpg '.getPerceptHash("E:\Denwer3\home\imagecomparer.loc\www\Article\img\_test1.jpg").'<br>'; echo '_test2.jpg '.getPerceptHash("E:\Denwer3\home\imagecomparer.loc\www\Article\img\_test2.jpg").'<br>'; echo '_test3.jpg '.getPerceptHash("E:\Denwer3\home\imagecomparer.loc\www\Article\img\_test3.jpg").'<br>'; ?> 


рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:
 _test1.jpg f9f6f0f0e0e0b0f000
 _test2.jpg fbf6f0f0c0b0f0000
 _test3.jpg 1e1e3e3e3e3e3c00


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓рд╛ рдФрд░ рджреВрд╕рд░рд╛ рд╣реИрд╢ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВ, рдФрд░ рддреАрд╕рд░рд╛ рднреА рдХрд░реАрдм рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рднреА рдЖрдпреЛрдЬрд┐рдд рдХреА рдЧрдИ рдереА, рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИред

3. рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛


рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпреБрджреНрдз рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рдерд╛ред рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рдХреЗ рдХреИрдЯрд▓реЙрдЧ / рдореВрд▓реНрдп / рд╕рд╛рдЗрдЯреЛрдВ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдИ рджрд┐рди рд▓рдЧ рдЧрдПред рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА + рд╣реИрд╢ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рдФрд░ рдЪрд┐рддреНрд░ рд╕реНрд╡рдпрдВ рдбрд┐рд╕реНрдХ рдкрд░, рдЖрдЧреЗ рдХреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд▓рдЧрднрдЧ 3 рдорд┐рд▓рд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдереЗред
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╡рд┐рдзрд┐ рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдЖрдзрд╛рд░ рдмрдврд╝рддрд╛ рдЧрдпрд╛, рдкрд░рд┐рдгрд╛рдо рдФрд░ рдмрджрддрд░ рд╣реЛрддреЗ рдЧрдП, рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдмрд╕ рдХреВрдбрд╝реЗрджрд╛рди рдореЗрдВ рдирд╣реАрдВ рд▓реБрдврд╝рдХ рдЧрдПред рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╡рд┐рдзрд┐ рдиреЗ рдЙрди рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬреЛ рдмрд╕ рдЖрдХрд╛рд░ рджреЗрддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЫрд╡рд┐ рдХреЛ рд░рдВрдЧ-рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрд░реЙрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдПрдХ рд╡реЙрдЯрд░рдорд╛рд░реНрдХ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЬреЛ рдмрд╣реБрдд, рдмрд╣реБрдд рдЖрдо рдерд╛), рдкрд░рд┐рдгрд╛рдо рдЦрд░рд╛рдм рдерд╛ред

4. рдкрд▓рд╛рд╢


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрдВ рд╢реЛрднрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдЧрдВрднреАрд░ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЕрд╕рддрдд рдХреЛрд╕рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреАрдПрдЪрдПрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рднрд╛рд░реА рд╣реИ рдФрд░ рдЗрд╕реЗ php рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖред рдПрд╕рдЖрдИ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдерд╛, рдЬреЛ рдЗрдирдкреБрдЯ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рд╣реИрд╢ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп http://www.phash.org/ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛

рдлрд┐рд░ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдирдореВрдирд╛ рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
 #include "stdafx.h" #include <iostream> #include <windows.h> using namespace std; #ifndef _WIN32 typedef unsigned _uint64 ulong64; typedef signed _int64 long64; #else typedef unsigned long long ulong64; typedef signed long long long64; typedef unsigned char uint8_t; typedef unsigned int uint32_t; #endif typedef int (*ph_dct_imagehash)(const char* file,ulong64 &hash); int _tmain(int argc, TCHAR* argv[]) { if (argc > 1) { char* filename = (char *)malloc( 255 ); wcstombs( filename, argv[1], 255 ); ph_dct_imagehash _ph_dct_imagehash; HINSTANCE hInstLibrary = LoadLibrary(L"pHash.dll"); if (hInstLibrary) { _ph_dct_imagehash = (ph_dct_imagehash)GetProcAddress(hInstLibrary, "ph_dct_imagehash"); int err = 0; err = GetLastError(); ulong64 myhash=0; _ph_dct_imagehash(filename, myhash); std::cout << myhash << std::endl; FreeLibrary(hInstLibrary); } else { return 0; } }else{ return 0; } return 0; } 


рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ - pHashConcole.exe рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ

Php рд╕реЗ, рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдирд┐рдпрдорд┐рдд рдПрдХреНрд╕рдПрдХреНрд╕рдПрдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
 $pHash=exec('E:\Article\pHashConsole.exe "'.$filename.'"'); 


рд╣реИрд╢ рдХреЛ рдПрдХ MySQL рдЯреЗрдмрд▓ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 'SELECT * FROM (SELECT * , BIT_COUNT( hash ^ '.$pHash.') AS distance FROM images ORDER BY distance LIMIT 0 , 100) s1 WHERE distance < '.$precision.';' 

 рдЬрд╣рд╛рдВ, $ рдлреЗрд╢ - рдПрдХ рд╣реИрд╢ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╕рдорд╛рди рд╣реИрдВред
 $ рд╕рдЯреАрдХрддрд╛ - рд╕рдЯреАрдХрддрд╛, рдЕрдзрд┐рдХ, рдЕрдзрд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╕реЗ рджреВрд░ рд╡реЗ рд╣реЛрдВрдЧреЗред  рдЗрд╕реЗ рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред


рдлреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рд╕реНрдХреЗрд▓ рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ, рдмрд▓реНрдХрд┐ рдЙрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рднреА рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдереЗ, рд╡реЙрдЯрд░рдорд╛рд░реНрдХ, рдРрд╕реЗ рднрд╛рдЧ рдЬрд╣рд╛рдВ рд░рдВрдЧ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗ рдпрд╛ рдХрд╛рдЯ рджрд┐рдП рдЧрдП рдереЗред

5. рдЕрдВрдд!


рдЗрди рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝реЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдзрд╛рд░ рдПрдХрддреНрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛, рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЦрд░реАрдж рдкрд░ рдЙрджреНрдпрдо рдХреА рд▓рд╛рдЧрдд рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд╛рдЧрд▓ рд╡рд┐рдЪрд╛рд░ рди рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реЛ рдЧрдпрд╛, рдмрд▓реНрдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рдерд╛, рдЬрд┐рд╕рдХреА рдмрджреМрд▓рдд рдПрдХ рдореВрд░реНрдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖред

рдпрд╣рд╛рдВ рдЬрд╛рдирд┐рдП рдордЬреЗрджрд╛рд░ рдХрд╣рд╛рдиреА ...

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж! рдЕрдВрдд!

Source: https://habr.com/ru/post/In210388/


All Articles