рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдмрдк рд╕рдорд░реНрдерди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдзрдиреНрдпрд╡рд╛рджред
рд╣рдо рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИ?
рдЦреИрд░, рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ?
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдпрд╣ <canvas>
рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрд╛рдд рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред [рдмреНрд░рд╛рдЙрдЬрд╝рд░.ts] рджреЗрдЦреЗрдВред
рдиреЛрдб.рдЬреЗрдПрд╕ рдореЗрдВ, [рдЬрд┐рдВрдк] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдореИрдВ рдХреБрдЫ рдмрд╛рдЗрдирд░реА/рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЯреВрдЯ рд╕рдХрддреЗ рд╣реИрдВред [рдиреЛрдб.ts] рджреЗрдЦреЗрдВред
рдиреЛрдб-рд╡рд╛рдЗрдмреНрд░реЗрдВрдЯ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдк рд╕рдорд░реНрдерди ImageClass
s рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдИ рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ ImageClass
рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Vibrant.DefaultOpts.ImageClass = YourCustomImageClass
рд╕реЗрдЯ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
ImageBase
] рдмрдврд╝рд╛рдПрдБредImage
] рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИредрдЖрдЙрдЯрдкреБрдЯ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рд░рдгреА [ ImageData.data
] рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╛рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ "рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрд░рдЬреАрдмреАрдП рдХреНрд░рдо рдореЗрдВ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 0 рдФрд░ 255 (рд╢рд╛рдорд┐рд▓) рдХреЗ рдмреАрдЪ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ"ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрдк рдбрд┐рдХреЛрдбрд░ рдкреИрдХреЗрдЬ рдЦреЛрдЬрдиреЗ рдХреА рдмрд╛рдд рд╣реИред
рдорд╣рд╛рди! рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!
рдЕрдЪреНрдЫрд╛!
рдПрдлрд╡рд╛рдИрдЖрдИред рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг 3.1.0 рдХреЗ рд▓рд┐рдП рдХрдИ рдЫреЛрдЯреЗ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдиреЛрдб-рд╡рд╛рдЗрдмреНрд░реЗрдВрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╕рднреА рдЫрд╡рд┐ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ npm рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП @vibrant/image-node
ред рдпрд╣ рдЕрднреА рднреА рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЬреИрд╕рд╛ рд╣реА рд╣реИред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЕрдм рдЖрдкрдХреЛ рдкреВрд░реЗ рд░реЗрдкреЛ рдХреЛ рдлреЛрд░реНрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ @vibrant/image
рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЪреАрдЬреЗрдВ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдВрдЧреАред
рдорд╣рд╛рди !
рдореИрдВ рдЕрдкрдиреЗ рдбрд┐рд╕реНрдХреЙрд░реНрдб рдмреЙрдЯ рдореЗрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ рдЗрд╕рдХреЗ рдХрдИ рдлрд╛рдпрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реЗрдмрдк рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рдЪреАрдЬ рдмрдирдиреЗ рд▓рдЧреА рд╣реИред рдореБрдЭреЗ рдПрдХ wontfix
рд▓реЗрдмрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореБрдЭреЗ рд╕рдЪрдореБрдЪ рдЪрд┐рдВрддрд╛ рд╣реЛрддреА рд╣реИред
@nitriques рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрднреА рддрдХ "рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ" рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд┐рдпрд╛ рд╣реИ? рдпрд╛ рдЖрдк рдЖрдЦрд┐рд░ @akfish рдкрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?
@ рдлрд╡рдирд╛ рдЗрд╕реЗ рдореБрдЦреНрдп рдкреИрдХреЗрдЬ/рд░реЗрдкреЛ рдореЗрдВ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо ImageClass (рдФрд░ рдПрдХ рдЕрд▓рдЧ npm рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдареАрдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред Node.js (рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП WebP libs рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдпрд╛ рдиреЗрдЯрд┐рд╡ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдиреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯ-рдСрдл-рдмреЙрдХреНрд╕ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реВрдЪреА рдореЗрдВ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬрд▓реНрдж рд╣реА рдХрд┐рд╕реА рднреА рд╕рдордп рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@Favna
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдирд╛ рдХреЛрдИ "рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ" рдХрд┐рдпрд╛ рд╣реИ?
рд╣рд╛рдВ рдФрд░ рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рджреЗрд╢реА рдРрдб-рдбреЙрди рд╣реИрдВ
рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд▓реНрдж рд╣реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрдХрд▓реНрдкрд┐рдХ рдзреНрд╡рдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд┐рдВрдк рдХреЗ рдмрдЬрд╛рдп рддреЗрдЬ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ? рдЪреВрдВрдХрд┐ v0.20 рд╢рд╛рд░реНрдк рдХреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд┐рд╕реНрдЯрдо рдкрд░ npm install
рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЪрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ webp рдФрд░ svg рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рднреА рдЖрддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рддреЗрдЬ-рдЖрдзрд╛рд░рд┐рдд ImageClass
рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ рдЖрдЧреЗ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ resize
/ scaleDown
рдХреЛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рддреЗрдЬ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХрд╛ рдСрдкрд░реЗрд╢рди async рд╣реИред
fyi: рдпрд╣рд╛рдВ рддреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ ImageClass рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗрдмрдк рдФрд░ рдПрд╕рд╡реАрдЬреА рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг, рдХреЛрдб load
рд╡рд┐рдзрд┐ рдореЗрдВ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рдиреЛрдб-рд╡рд╛рдЗрдмреНрд░реЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ:
import * as sharp from "sharp";
import {ImageBase, ImageSource} from "@vibrant/image";
class SharpImage extends ImageBase {
private _image: ImageData = undefined as any;
async load(image: ImageSource): Promise<ImageBase> {
if (typeof image === "string" || image instanceof Buffer) {
const {data, info} = await sharp(image)
.resize(200, 200, {fit: "inside", withoutEnlargement: true})
.ensureAlpha()
.raw()
.toBuffer({resolveWithObject: true});
this._image = {
width: info.width,
height: info.height,
data: (data as unknown) as Uint8ClampedArray,
};
return this;
} else {
return Promise.reject(
new Error("Cannot load image from HTMLImageElement in node environment")
);
}
}
clear(): void {}
update(): void {}
getWidth(): number {
return this._image.width;
}
getHeight(): number {
return this._image.height;
}
resize(targetWidth: number, targetHeight: number, ratio: number): void {
// done in the load step, ignoring any maxDimension or quality options
}
getPixelCount(): number {
const {width, height} = this._image;
return width * height;
}
getImageData(): ImageData {
return this._image;
}
remove(): void {}
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
fyi: рдпрд╣рд╛рдВ рддреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ ImageClass рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡реЗрдмрдк рдФрд░ рдПрд╕рд╡реАрдЬреА рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг, рдХреЛрдб
load
рд╡рд┐рдзрд┐ рдореЗрдВ рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ, рдиреЛрдб-рд╡рд╛рдЗрдмреНрд░реЗрдВрдЯ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ: