それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

写真の向きを取得し修正するコマンド(exiftool)

Exifの写真向きを多用するiphoneの写真はそれはそれで自然なのですが、フォトライフにアップロードすると、なんというか、気持ち悪いのですね。

画像の向きを修正せずにブログにアップロードしブラウザで表示したら
  • windowsは反転したまま
  • MacOSXはは画像だけを表示したら反転が修正される
  • iOS はブラウザ中で反転する。

的なことが起きていた。すごく気持ち悪い?
ちゃんと調べるのも面倒なので、写真の向きを修正するようにした。

OSX のファインダで見るとこうみえても

f:id:takuya_1st:20130320215122j:plain( orientation = 6 )

■ Windowsでみるとこうなる。
■ ブログにアップでも同じ(フォトライフに上げるとこうなる。)
f:id:takuya_1st:20130803180054j:plain

向きを正向きに修正し、orientationを修正

同じように見えても、Exifは修正されてる。
f:id:takuya_1st:20130320215122j:plain( orientation = 1 )



この状態にしてアップすると当然うまく行く。

Exifを考慮してUbuntuOS Xは画像を表示してくれる、でもWindowsはそれをしてくれないWindowsがしてくれないので、当然ブラウザもやらなくていいという発想なのでしょうか。

画像の向きを修正してExifデータも修正する。

#!/usr/bin/env  ruby
#coding:utf-8

require 'rubygems'
require 'mini_exiftool'
require 'pp'
unless ARGV.size > 0 then
     puts " usage : #{__FILE__} 画像ファイル [画像ファイル], [画像ファイル].. "
     puts "\t画像の向きを修正してExifをノーマルに合わせます"

end

ARGV.each{|f|
     next unless File.exist? f
     t = MiniExiftool.new f
     next if t["Orientation"].nil?

     case t["Orientation"]
          when /Horizontal/ 
               # Orientation 1
          when /Mirror horizontal/
               # Orientation 2
               `mogrify -flop '#{f}' `
          when /Rotate 180/
               # Orientation 3
               `mogrify -rotate 180  '#{f}' `
          when /Mirror vertical/
               # Orientation 4
               `mogrify -flip '#{f}' `
          when /Mirror horizontal and rotate 270 CW/
               # Orientation 5
               `mogrify -flop '#{f}' `
               `mogrify -rotate 270  '#{f}' `

          when /Rotate 90 CW/
               # Orientation 6
               `mogrify -rotate 90  '#{f}' `
          when /Mirror horizontal and rotate 90 CW/
               # Orientation 7
               `mogrify -flop '#{f}' `
               `mogrify -rotate 270  '#{f}' `

          when /Rotate 270 CW/
               # Orientation 8
               `mogrify -rotate 270  '#{f}' `
     end

     t["Orientation"]=1
     t.save

}