cakephp2.xmediapluginimagickでアップロードした画像の向きがバグるのを修正

2016年11月13日更新 view: 40 view
https://pbs.twimg.com/profile_images/581025665727655936/9CnwZZ6j.jpg

向きがめっちゃんこやん!

スポンサードリンク

なぜかiphoneでみると、ユーザーがアップロードした画像の向きが変わる。
これは、ExifのOrientationの値が「1」以外になっているため。


今回は、cakephp2.xのMediapluginと imagick を用い、
この状況を改善したい。

流れ
・phpをアップロードした時の $_FIELS のデータを取得
・必要に応じて回転させる
・回転させた画像を一時的にファイルに保存し、そのファイルをさらにアップロード。

まずはimagickがインストールされているか、調べる。
phpinfo(); をやればインストールされているかがわかる。

if($this->request->data){

if(preg_match("/\.jpeg/",$this->request->data['Attachment'][0]['file']['name'])){
$this->request->data['Attachment'][0]['file']['name'] = time().".jpg";
}

if(!empty($this->request->data['Attachment'][0]['file']['name'])){

$imagick = new \Imagick();
$uid = md5(uniqid(rand(),1));

// 一時ファイルを読み込む
$imagick->readImage($_FILES['data']['tmp_name']['Attachment'][0]['file']);
// 必要とあらば回転
$imagick->autoOrient();
// 回転した画像を書き出し
$imagick->writeImage(WWW_ROOT."/files/".$uid.".jpg");

$newdata = $this->request->data;
$newdata['Attachment'][0]['file'] = WWW_ROOT."/files/".$uid.".jpg";

if($this->User->saveAll($newdata)){

unlink(WWW_ROOT."/files/".$uid.".jpg");//一時ファイルをここで削除

} else {

pr($this->request->data);
pr($this->User->validationErrors); //cakephp2
exit;

}

} else {
$this->Session->setFlash('Error: ファイルを指定して下さい');
$this->redirect($this->referer());
}
}
スポンサードリンク

関連記事

関連カテゴリ

あみ

とにかくたくさんまとめてみます。

ピックアップ

パソコン・ソフトウェア ランキング

3月29日 ( 水 ) にアクセスが多かった記事はこちら!