Libvips: `auto_rotate` рдЕрдкреЗрдХреНрд╖рд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрд┐рдд рдЫрд╡рд┐ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдШреБрдорд╛рдИ рдЧрдИ рд╣реИред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдордИ 2019  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: libvips/libvips

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ S9+ рджреНрд╡рд╛рд░рд╛ рд▓реА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЫрд╡рд┐ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рдЦрддреА рд╣реИред рдореИрдВ рдЙрд╕ рдЫрд╡рд┐ рдХреЛ рд▓рд┐рдирдХреНрд╕ ( Debian ) рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ ruby рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрд╢рд╛ 90-рдбрд┐рдЧреНрд░реА рдШреБрдорд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рд╣реА рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдШреВрдордирд╛ рдЪрд╛рд╣рд┐рдПред :autorotate рдХреБрдВрдЬреА рдиреЗ рдорджрдж рдирд╣реАрдВ рдХреАред

рдирдореВрдирд╛ рдЫрд╡рд┐: 20190519_225024.zip

_Sample рдореЗрдВ рд▓рдВрдмрд╡рдд USB рд╕реНрдЯрд┐рдХ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рд╣рдореЗрд╢рд╛ рдХреНрд╖реИрддрд┐рдЬ рд╣реЛрддрд╛ рд╣реИред_

рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдБ рднреА рджреЗрдЦреЗрдВ: https://github.com/janko/image_processing/issues/52

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВрдиреЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЙрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ libvips 8.6.4 рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдпрд╛, рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реА рд╣реИред рдореБрдЭреЗ рд╕рд╣реА рд░реЛрдЯреЗрд╢рди рдорд┐рд▓рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реАред

рдореИрдВрдиреЗ рдПрдХ рдЖрдЦрд┐рд░реА рдЯреЗрд╕реНрдЯ рднреА рдХрд┐рдпрд╛ рдерд╛ред рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВ рдФрд░ рдлрд┐рд░ рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдХреЛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдШреБрдорд╛рдП рдЧрдП рд╣реИрдВред

рд▓рд┐рдирдХреНрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ libvips 8.7.4 ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ 8.8.0-rc3 рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рджреЛрдиреЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рд╣реИред

рд╕рд╛рде рд╣реА, @janko рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореИрдХ рдкрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ?

_рдореИрдВ рдкрд╣рд▓реЗ рдЧреЛрд▓рдВрдЧ рдкрд░ рдЬрд╛рдЧ рд░рд╣рд╛ рдерд╛, рдЬрдм рдореИрдВ рдРрд╕реА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ (рдЬреИрд╕реЗ рд╕рдВрд▓рдЧреНрди рдПрдХ) рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ :autorotate рд╕рд╛рде рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд░реВрдмреА_ рдкрд░ рдирд╣реАрдВ

рд╕реНрдХреНрд░рд┐рдкреНрдЯ :

require "vips"

file_path = "./20190518_094223.jpeg"

Vips::Image
  .new_from_file(file_path, autorotate: true)
  .write_to_file("autorotated_1.png")

Vips::Image
  .new_from_file(file_path)
  .autorot
  .write_to_file("autorotated_2.png")

Vips::Image
  .jpegload(file_path, autorotate: true)
  .write_to_file("autorotated_3.png")

Vips::Image
  .thumbnail(file_path, size, height: size)
  .write_to_file("autorotated_4.png")

Vips::Image
  .thumbnail(file_path, size, height: size, auto_rotate: true)
  .write_to_file("autorotated_5.png")

рдЕрджреНрдпрддрди:

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЪреВрдБрдХрд┐ рдореБрдЭреЗ рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреА рд╣рдБрд╕реА рд░реЛрдХ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рдпрд╣ рдХреИрд╕реЗ рдпрд╛рдж рдЖрдпрд╛!

рд╣рд╛рдВ, рдорд╢реАрди рдкрд░ libexif-dev рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реИ...

libexif-dev рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред

(рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛)

рд╢реБрдХреНрд░рд┐рдпрд╛!

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣реИрд▓реЛ @gencer ,

рдмрд╕ рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдбреЗрдмрд┐рдпрди рдкрд░ рдЖрдкрдХреЗ libvips рдХреЛ libexif рдХреЗ рдмрд┐рдирд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

Exif рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛, libvips рдЫрд╡рд┐ рдкрд░ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдЯреИрдЧ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдШреБрдорд╛рдПрдЧрд╛ рдирд╣реАрдВред

рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдкрд░ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдЯреИрдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЙрджрд╛ред

$ vipsheader -f orientation ~/pics/Portrait_6.jpg 
6

рдЪреВрдБрдХрд┐ рдореБрдЭреЗ рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЕрдкрдиреА рд╣рдБрд╕реА рд░реЛрдХ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рдпрд╣ рдХреИрд╕реЗ рдпрд╛рдж рдЖрдпрд╛!

рд╣рд╛рдВ, рдорд╢реАрди рдкрд░ libexif-dev рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рд╣реИ...

libexif-dev рд╕рд╛рде рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред

(рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛)

рд╢реБрдХреНрд░рд┐рдпрд╛!

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Kyle-Kyle picture Kyle-Kyle  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sonyarianto picture sonyarianto  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sonylifull picture sonylifull  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

binarykitchen picture binarykitchen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BorntraegerMarc picture BorntraegerMarc  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ