2013/07/10

[IOS] iPhone&iPad PHPで画像の向きを変える

画像の投稿時に起こる反転と回転処理

iphoneやipadでホームボタンを上にして写真を撮りWEBにアップロードすると
画像が寝転んでしまう・・・
もしくは、ホームボタン左にすると左右上下逆になってしまう・・・

どうやらappleはカメラ撮影時のメタデータに特殊なデータを仕込んでいるようで、
もちろん他の環境では、そんなデータを読んでるわけもなく
見え方がおかしくなってしまう。

そこでとても参考になったのが

PHPで画像の向きを修正する方法

貴方は神様ですか?


恥ずかしながら、exif情報の回転の部分まで頭が回らず
職場の特定の人を撮影すると起こる○○さん現象と名付けていた。
この記事のおかげでオカルトチックな脳内解決に終止符を打つことができて
本当によかった。

もろパクリみたいになるけど、一応無くなった時のバックアップのためコードを
残しておきます。


 
$img_path = '/server_path/hoge.jpg'; //向きを調べる画像のパス
$save_path = '/server_path/moge.jpg'; //向きを変えた画像を保存するパス
$exif_datas = exif_read_data($img_path);
if(isset($exif_datas['Orientation']) && $exif_datas['Orientation'] == 6){
    $source = imagecreatefromjpeg($img_path);
    $rotate = imagerotate($source, 270, 0);
    imagejpeg($rotate, $save_path, 100);
}
//画像を上書きする場合、$img_pathと$save_pathを同一のものにします。


Orientation、このキーが
apple独自の回転引数になっている模様。
ちなみにipadminiでホームボタン上にして撮影後
アップロードすると、Orientationの値は8になってました。
※Orientation 8の時はrotateは-270にしないとまた変な風にずれます。
ついでのついでに、ホームボタン左にして撮影すると、Orientationは3になります。
rotateは180度に回転させないと、これまたずれます。

imagerotate関数で画像の回転を行って、imagejpegで上書き作業を行っています。
objective-cでやろうかと思ったけど、これobjective-cでやると
めちゃめちゃメモリ食うしなんならバグ含みのメソッドを使うので
phpでやるのが吉だと判断しました。


7/12:追加
取得できたデータ配列をのせときます。


 
$img_path = $file_full_path; //向きを調べる画像のパス
$save_path = $file_full_path; //向きを変えた画像を保存するパス
$exif_datas = exif_read_data($img_path);

if(isset($exif_datas['Orientation'])){
    switch ($exif_datas['Orientation']){
        case(3):
 $rotation=180;
 break;
        case(8):
 $rotation=90;
 break;
        case(6):
 $rotation=-90;
 break;
        default:
 $rotation=0;
 break;
    }
    $source = imagecreatefromjpeg($img_path);
    $rotate = imagerotate($source, $rotation, 0);
    imagejpeg($rotate, $save_path, 100);
}

2013/06/26

IOS7 beta2 UIWEBVIEW でのexcel表示

なぜか表示されない。

レファレンスによると
下記の拡張子は許可されている
  • Excel (.xls)
  • Keynote (.key.zip)
  • Numbers (.numbers.zip)
  • Pages (.pages.zip)
  • PDF (.pdf)
  • Powerpoint (.ppt)
  • Word (.doc)
まさかxlsxだからだめなのかな?と思って視線をずらす....

Important: Excel, Powerpoint and Word documents must be saved using Microsoft Office 97 or newer formats.
ふむふむ(意訳:オフィスの3つは97以降使ってね)


また分かり次第更新することにします。

追記
ios6.1.4で
xls
xlsx
docs
pptx
pdf
が表示されることを確認

ios7用にwebView単体のアプリケーションを作成
上記5つのファイルの挙動を確認。
pdfしか表示されなかった。
正式リリースまで待つしかないのか・・・

たぶんnumberとか(mac用のエクセル)は普通に出るんだろうな・・・
試してないので分からない。

追記:7/2
iPad
iPadmini
IOS7beta2で両方とも撃沈
ただ、iPadにかんしては他のアプリへ誘導するような画面が出てくる。
やはりAPIが成仏したの・・・?
そもそも、サポート自体打ち切る気?
これのせい?

マイクロソフトリリースアプリ


追記:7/9
beta3にあげたらなおった!
モジュール上げ忘れとかかな?
一件落着