iPhoneで撮った画像が、横向きに90度回転してしまう。phpでアップロードした時 2023/09/24
phpで画像ファイルアップロードをした時、普通にwindowsなど、Chrome,firefox,edgeブラウザでアップロードすると問題ないけど、
iphoneやipadなどios のsafari で写真を撮った画像をそのまま下記でアップロードすると90度左に回転してアップされてしまう。
iphoneやipadなどios のsafari で写真を撮った画像をそのまま下記でアップロードすると90度左に回転してアップされてしまう。
//jpg png gifで登録されたファイルを変換する70px 70px define('FILE_PATH','./userimage/'); //ファイルパスを指定 $imgKey = 'images'; //ファイルのキー if( !is_uploaded_file( $_FILES[$imgKey]['tmp_name']) ){ //リダイレクト $err = "画像ではありません。画像が正しく読み込めませんでした"; return redirect('/mypage')->with('err', $err); exit; } else { //拡張子チェック $tmpExt = $_FILES[$imgKey]['type']; if ($tmpExt == 'image/jpeg' || $tmpExt == 'image/jpg') $imgExt = '.jpg'; else if ($tmpExt == 'image/png') $imgExt = '.png'; else if ($tmpExt == 'image/gif') $imgExt = '.gif'; else if ($tmpExt == 'image/webp') $imgExt = '.webp'; $sql = 'SELECT ****** FROM *** WHERE id = "*******" LIMIT 1'; $result = DB::select($sql); if(empty($result)) { //リダイレクト $err = "不正アクセス"; return redirect('/mypage')->with('err', $err); exit; }else{ //画像を小さくする //画像の加工処理 $err = false; $tempFile = $_FILES['images']['tmp_name']; $w_check = 4; $h_check = 4; $w = 70; $h = 70; //拡張子判別 switch ($_FILES['images']['type']) { case 'image/jpeg': $ext = '.jpg'; $irc = @imagecreatefromjpeg($tempFile); break; case 'image/png': $ext = '.png'; $irc = @imagecreatefrompng($tempFile); break; case 'image/gif': $ext = '.gif'; $irc = @imagecreatefromgif($tempFile); break; case 'image/webp': $ext = '.webp'; $irc = @imagecreatefromwebp($tempFile); break; default: $ext = null; $irc = null; break; } if (!$irc || !$ext) {// 画像が正しく読み込めなかった、または拡張子違反 //リダイレクト $err = "画像ではありません。画像が正しく読み込めませんでした"; return redirect('/mypage')->with('err', $err); exit; } if(imagesx($irc) < $w_check * 0.56 || imagesy($irc) < $h_check * 0.56 ){$err = true;}//画像が小さすぎる if($err){ //リダイレクト $err = "画像が小さすぎます"; return redirect('/mypage')->with('err', $err); exit; } //--------iphone ipad 回転角度-------- $user_agent = $_SERVER['HTTP_USER_AGENT']; if (preg_match('/iPhone|iPod|iPad/iu', $user_agent)){ //$degrees = 270; //左に270度(→) //$irc = imagerotate($irc, $degrees, 0); $exif_data = @exif_read_data($_FILES[$imgKey]['tmp_name']); $orientation = (!empty($exif_data['Orientation']))? $exif_data['Orientation']: 1; switch ($orientation) { case 1: //no rotate break; case 2: //FLIP_HORIZONTAL imageflip($irc, IMG_FLIP_HORIZONTAL); break; case 3: //ROTATE 180 $irc = imagerotate($irc, 180, 0); break; case 4: //FLIP_VERTICAL imageflip($irc, IMG_FLIP_VERTICAL); break; case 5: //ROTATE 270 FLIP_HORIZONTAL $irc = imagerotate($irc, 270, 0); imageflip($irc, IMG_FLIP_HORIZONTAL); break; case 6: //ROTATE 90 $irc = imagerotate($irc, 270, 0); break; case 7: //ROTATE 90 FLIP_HORIZONTAL $irc = imagerotate($irc, 90, 0); imageflip($irc, IMG_FLIP_HORIZONTAL); break; case 8: //ROTATE 270 $irc = imagerotate($irc, 90, 0); break; } } //------------------------ //ディレクトリ $targetPath = FILE_PATH; //ファイル名作成 $user_id = **********; $dst = $targetPath . $user_id ."_image". $ext; //$ext拡張子 //-----前の画像を削除する update----- $sql = 'SELECT ********** FROM ********** WHERE id = "**********" LIMIT 1'; $result = DB::select($sql); if(!empty($result)){ //1.前の画像を削除する $image_url = $result[0]->image; @unlink($image_url); //2.cr_users[image]にUPDATE //UPDATE $updateimage = DB::update('UPDATE ********** SET image = ? WHERE id = ?', [$dst, ********** ]); if ($updateimage == 0) { $result = ""; } } //---------------------------------- $thumb_width = $w; $thumb_height = $h; $width = imagesx($irc); $height = imagesy($irc); $original_aspect = $width / $height; $thumb_aspect = $thumb_width / $thumb_height; if ( $original_aspect >= $thumb_aspect ){ // If the thumbnail is wider than the image $new_width = $thumb_width; $new_height = $height / ($width / $thumb_width); }else{ // If image is wider than thumbnail (in aspect ratio sense) $new_height = $thumb_height; $new_width = $width / ($height / $thumb_height); } $thumb = imagecreatetruecolor( $thumb_width, $thumb_height ); imagefill($thumb, 0, 0, 0xFFFFFF); // Resize and crop imagecopyresampled($thumb, $irc, 0 - ($new_width - $thumb_width) / 2, // Center the image horizontally 0 - ($new_height - $thumb_height) / 2, // Center the image vertically 0, 0, $new_width, $new_height, $width, $height); imagejpeg($thumb, $dst, 90); // 画質90%に設定 chmod($dst, 0777); //メモリ開放 imagedestroy($thumb); //---作る(70x70)end--- @unlink($tempFile);//$_FILESファイル削除 //ディレクトリ+ファイル名 echo $dst; }//SELECT } //jpg png gifで登録されたファイルを変換する70px 70px
サーバコマンド
∟php5.3のインストール(CentOS)
∟mysqlのインストール(CentOS)
∟apacheのインストールと起動(CentOS)
∟apacheのログの確認(CentOS)
レンタルサーバ/VPS
プログラミング
∟簡単なAJAXプログラム php js html
∟TinyMCEのインストール 設定 textarea
∟TinyMCEの日本語化インストール
開発フリーソフト
∟AptanaStudio3(Windows7)
∟AptanaStudio3日本語化
PHPで画像認証をする
プログラミング
∟Android 画像ファイルを描画する
開発フリーソフト
∟AptanaStudio3(Windows7)
∟AptanaStudio3日本語化
∟Androidエミュレータのインストール
∟iBBDemo3 iPhone/iPad表示エミュレータ
Android端末ChromeでJavaScriptデバック
Googleウェブマスターツールの登録
Googleアナリティクスの使い方
Google検索結果ページを削除する
Googleトレンド
Google AdWords[キーワードツール]
関連ワードを調べる
急上昇ワードを調べる
colorpicker
colorbox
colorbox[2]
newsticker[1]
newsticker[2]上にスクロール
newsticker[3]左へスクロール
newsticker[4]左へスクロール
Cycle Plugin(+ Easing Plugin)
Coin Slider
スライダー[1]下にサムネイル画像
スライダー[2]右にサムネイル画像
スライダー[3]左右矢印 下にコントロールあり
スライダー[4]左右矢印 下にコントロールなし
スライダー[5]左右矢印 下にコントロールあり(stop付き)
スライダー[6]画像外の左右矢印
スライダー[7]自動切り替え
スライダー[8]自動切り替え
スライダー[9]自動切り替え
css3[transition]
リストとグリッド切り替え表示する[javascript-cssデザイン]
Marquee jQuery[上にスクロール]
DD_belatedPNGの使い方[透過処理PNG]
ナビボタンのロールオーバー[CSS]
ナビボタンのロールオーバー[JS(jQuery)]
ナビボタンのロールオーバー[JS滑らかに切り替わる]
PHPで画像認証をする
広告をブログに張る[クリック課金]
∟忍者AdMax
∟グーグルAdSense
レンタルサーバ・VPS情報
ポイントサイト情報
アドネットワーク情報
無料のアクセス解析ツール(オープンソース等)
無料アクセス解析の導入
ブログランキングサイト一覧
sitemap.xmlを作成する
SEO対策 Google AdWords(キーワードツール)
SEO対策 SEOTOOLS
SEO対策 SEOチェキ