Help us understand the problem. What is going on with this article?

auto_orientってExif情報も書き換えてくれるの?

More than 5 years have passed since last update.

結論

適切に書き換えてくれます。

なんでこんなことを思ったのか

Carrierwaveで画像をアップロードする際、Exif情報にあわせて画像を回転させたいよねというニーズに応えるためにこんなメソッドを用意して、

module CarrierWave
  module MiniMagick
    def fix_exif_rotation
      manipulate! do |img|
        img.auto_orient
        img = yield(img) if block_given?
        img
      end
    end
  end
end

こんな風に使ったりしますよね。

process :fix_exif_rotation

でもauto_orientをやったときって、Exif情報もちゃんと変更されるんですかね? Exif情報がそのままの状態で画像が回転してしまっているといったビミョーな状態にはちゃんとならないようになっているのでしょうか? ちょっと見てみましょう。

auto_orientの中身はimagemagickの-auto-orientオプション

auto_orientでやっている内容といえば、中身はImageMagickの-auto-orientオプションなので、実際にImageMagickでこのオプションをつけて変換してやれば良いことになります。

対象のファイル

こんなExif情報を持つ、Exif情報を加味して画像表示すると、180度回転して表示される画像で試してみます。

(こちらで使っているExifToolの使い方はこちらをご覧ください:テスト用にEXIF情報を加工するときに知っておきたいExifTool

$ exiftool sample.jpg
ExifTool Version Number         : 9.63
File Name                       : sample.jpg
Directory                       : .
File Size                       : 197 kB
File Modification Date/Time     : 2014:06:12 11:16:03+09:00
File Access Date/Time           : 2014:06:12 11:26:24+09:00
File Inode Change Date/Time     : 2014:06:12 11:16:04+09:00
File Permissions                : rw-rw-rw-
File Type                       : JPEG
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : None
X Resolution                    : 1
Y Resolution                    : 1
Exif Byte Order                 : Big-endian (Motorola, MM)
Make                            : SonicGarden
Orientation                     : Rotate 180
Color Space                     : sRGB
Exif Image Width                : 1024
Exif Image Height               : 768
Image Width                     : 1024
Image Height                    : 768
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 1024x768

この画像に対してconvertをかけると・・・

$ convert -auto-orient sample.jpg sample_auto_orient.jpg
$ exiftool -s sample_auto_orient.jpg
ExifToolVersion                 : 9.63
FileName                        : sample_auto_orient.jpg
Directory                       : .
FileSize                        : 200 kB
FileModifyDate                  : 2014:06:12 11:29:05+09:00
FileAccessDate                  : 2014:06:12 11:29:06+09:00
FileInodeChangeDate             : 2014:06:12 11:29:05+09:00
FilePermissions                 : rw-r--r--
FileType                        : JPEG
MIMEType                        : image/jpeg
JFIFVersion                     : 1.01
ResolutionUnit                  : inches
XResolution                     : 1
YResolution                     : 1
ExifByteOrder                   : Big-endian (Motorola, MM)
Make                            : SonicGarden
Orientation                     : Horizontal (normal)
ColorSpace                      : sRGB
ExifImageWidth                  : 1024
ExifImageHeight                 : 768
ImageWidth                      : 1024
ImageHeight                     : 768
EncodingProcess                 : Baseline DCT, Huffman coding
BitsPerSample                   : 8
ColorComponents                 : 3
YCbCrSubSampling                : YCbCr4:2:0 (2 2)
ImageSize                       : 1024x768

OrientationがHorizontalになっています。つまりExif情報が適切に書き換えられた上で、画像の補正が行われているのですねー。なるほどなるほど。一安心です。

mah_lab
最近Elmにハマっています。仕事ではRuby on Railsを10年近く触ってます。 お便りはTwitterからお願いします: https://twitter.com/mah_lab
http://blog.mah-lab.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away