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にあげたらなおった!
モジュール上げ忘れとかかな?
一件落着

2012/09/10

ダウンロードファイルの文字コード

PHPで一時ファイルを作らずに、ヘッダーでダウンロード処理をしていたら
なぜかIEだけ文字化け・・・。

ちなみにPHPエクセル。

いたしかたなくコレ↓
$f_name = mb_convert_encoding($f_name, ‘sjis’, ‘utf-8′);

IEってなんでこう・・・

挙動不審なのorz

2012/02/22

フォームの電話番号

よくフォームを作ることがあるんだけども・・・

電話番号の処理で迷う・・・・

まず桁数!
[電話番号に関するQA]


これを読む限り・・・・


5ケタだと!!!!!



今まで4ケタでしか対応していなかった・・・。
3区分目は5ケタあるの知っていたけど。

1区分    2区分   3区分
△△△△ - ●●● - ■■■

こういうことになるのかな?


次にDB!

DBのフィールドってちょー悩む~
フォームばっかり作る側からすると
 電話番号のDBフィールドは3つちょーだい!
 と言いたいところだけど

電 話 番 号 っ て 連 な っ て 初 め て 1 つ の デ ー タ と な る

そう考えるとフィールドは1つで十分じゃん!みたいになる・・。
鬱だここらへんでライブラリ持ってないグラマーは全員鬱だ。

この作業をするには

3つに分割されたフィールドを受け取る
$post['tel1']
$post['tel2']
$post['tel3']

連結
$post['tel1'].'-'.$post['tel2'].'-'.$post['tel3']

ほんで、インサートって流れになる。

ここまではめんどくさくはないが・・・・。

ユーザー情報をDBから引いてきて、出力させるのがめんどくさい。



DBには 000-000-0000 というような、連結された値が入ってる。
そこでこの関数!
expload(区切り文字 , 文字列);
これで配列にパーンと展開してくれる!!!

PHP天才や!!!

とか、思うけど、他にいい方法があるなら.....と常々おもってる。



2012/02/21

PostgreSQL

phpPgAdminで、PKを設定していないと
編集できない現象に遭遇。
PKを設定するとなおった。