рдлреЛрдХрд╕ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдорд╛рд░реНрдЯ рдлрд╕рд▓

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдлреЛрдЯреЛрдмреИрдВрдХ рд╕реЗ рдХрдИ рджрд░реНрдЬрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рдЧрднрдЧ рд╕реМ рд╡рд┐рд╢рд╛рд▓ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдХреНрд░реЙрдк рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрди рддреИрдпрд╛рд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рддрдм рд╕реАрдПрдордПрд╕ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдлрд╝реЛрдЯреЛрд╢реЙрдк рдореЗрдВ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рддрдирд╛ рд╕рдордп рд▓реЗрдЧреА, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рджреБрдЦ рд╣реБрдЖ - рдЕрдЧрд▓реЗ рдирдП рд╕рд╛рд▓ рдХрд╛ рдЬрд╢реНрди рдордирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдЪрд╛рд░


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

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

рдпрд╣рд╛рдБ рддрдВрддреНрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд┐рддреНрд░рдг рд╣реИред
рдЫрд╡рд┐

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

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХреБрдЫ рдХрд┐рдпрд╛ рдерд╛ред HTML / CSS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдиреБрдХреВрд▓реА рдЫрд╡рд┐ рдХреНрд░реЙрдкрд┐рдВрдЧ github.com/adamdbradley/focal-point рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рдерд╛ред рдпрд╣рд╛рдБ, "рдлреЛрдХрд╕ рдкреЙрдЗрдВрдЯ" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╕рддреНрдп рд╣реИ! рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рддреИрдпрд╛рд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдЬреЛ рднреМрддрд┐рдХ рдЪрд┐рддреНрд░ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗред рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдлрд┐рд░ рдореИрдВрдиреЗ Node.js рдХреЛ рд▓рд┐рдпрд╛, рдЬреЛ рдХрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореЗрд░рд╛ рд╕реНрдерд╛рдпреА рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕реЗ рдореИрдВ рд╕реНрд╡рдЪрд╛рд▓рди рдФрд░ рдЫреЛрдЯреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рдирдИ рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрдкрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
  1. рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рдХреЗ рдЕрдиреБрдкрд╛рдд рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:
    k=Wr/Hr ,
    рдЬрд╣рд╛рдВ Wr рдФрд░ Hr рднрд╡рд┐рд╖реНрдп рдХреА рддрд╕реНрд╡реАрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рд╣реИ
  2. рдЕрдзрд┐рдХрддрдо рдЖрдпрдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдореВрд▓ рдЫрд╡рд┐ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдЧреА:
    if Wr >= Hr
    then Wm = Wi, Hm = Wi/k
    else Hm = Hi, Wm = Hm*k ,
    рдЬрд╣рд╛рдБ Wi, Hi рдореВрд▓ рдХреЗ рдЖрдпрд╛рдо рд╣реИрдВ, рдФрд░ Wm, Hm рдЕрдзрд┐рдХрддрдо рдЖрдпрдд рдХреЗ рдЖрдпрд╛рдо рд╣реИрдВред
  3. рдХреЗрдВрджреНрд░ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдирдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:
    fx2 = fx*Wm/Wi ,
    fy2 = fy*Hm/Hi ,
    fx, fx - рдореВрд▓ рдЫрд╡рд┐ рдореЗрдВ рдХреЗрдВрджреНрд░ рдмрд┐рдВрджреБ рдХрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ
  4. рд╣рдо рдХреЗрдВрджреНрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рд╕реЗ рдЖрдпрдд рдХреЛ рдмрджрд▓рдХрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╕рд▓ рдХрд░рддреЗ рд╣реИрдВ:
    crop(Wm, Hm, (fx-fx2), (fy-fy2))
  5. рд╡рд╛рдВрдЫрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдо рдХрд░реЗрдВ:
    resize(Wr, Hr)

рдЫрд╡рд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП GraphicsMagick рд▓рд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рддрд╣рдд рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рдерд╛ред рдФрд░ рд▓рдЧрднрдЧ рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рд╛ред рдЗрд╕рдХреЗ рд╕рд╛рде ImageMagick рдореИрдВ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ (рдФрд░ рдкреБрд░рд╛рдиреЗ рдЗрдореЗрдЬрдореИрдЬрд┐рдХ-рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдиреЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛), рд▓реЗрдХрд┐рди GraphicsMagick рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдиреЗ рддреБрд░рдВрдд рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдорд┐рдВрджрдЧреА рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, ImageMagick рдХреЛ рджреВрд╕рд░реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, gm рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╣рд╛рд░реНрдб рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИред

рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рди рдЬреЛрдбрд╝рд╛: рд╕рднреА EXIF, ICM, рдЖрджрд┐ рдХреЛ рдЕрдВрддрд┐рдо рдЫрд╡рд┐ рд╕реЗ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЫреЛрдЯреА рдЫрд╡рд┐ рдХреЛ рдПрдХ рддреАрдЦреЗрдкрди рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм 3000x4000px рд╕реЗ 200x300px рддрдХ рдХрдо рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЛ 2 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  1. format.json - рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдЙрди рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдлрд╝рд╕рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
  2. images.json - рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреА рд╣реИ рдФрд░ рдлрд╝реЛрдХрд╕ рдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рддреА рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХрд╣рд╛рдБ рдФрд░ рдХрд┐рд╕ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред


рдЖрдк GitHub github.com/fetis/fcrop рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкреЛрдВ, рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рд▓рд┐рдВрдХ 5.4 рдПрдордмреА

рдЫрд╡рд┐
200h135

рдЫрд╡рд┐
500h180

рдЫрд╡рд┐
900h172

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


All Articles