cafemocha7

cafemocha

iPhoneで撮った画像が、横向きに90度回転してしまう。phpでアップロードした時 2023/09/24



phpで画像ファイルアップロードをした時、普通にwindowsなど、Chrome,firefox,edgeブラウザでアップロードすると問題ないけど、
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





NEWS一覧







linuxサーバ
WEBデザインサーバコマンド
 ∟php5.3のインストール(CentOS)
 ∟mysqlのインストール(CentOS)
 ∟apacheのインストールと起動(CentOS)
 ∟apacheのログの確認(CentOS)
WEBデザインレンタルサーバ/VPS
phpプログラム
WEBデザインプログラミング
 ∟簡単なAJAXプログラム php js html
 ∟TinyMCEのインストール 設定 textarea
 ∟TinyMCEの日本語化インストール
WEBデザイン開発フリーソフト
 ∟AptanaStudio3(Windows7)
 ∟AptanaStudio3日本語化
WEBデザインPHPで画像認証をする
androidプログラム
WEBデザインプログラミング
 ∟Android 画像ファイルを描画する
WEBデザイン開発フリーソフト
 ∟AptanaStudio3(Windows7)
 ∟AptanaStudio3日本語化
 ∟Androidエミュレータのインストール
 ∟iBBDemo3 iPhone/iPad表示エミュレータ
WEBデザインAndroid端末ChromeでJavaScriptデバック
SEO対策・ツール
WEBデザインGoogleウェブマスターツールの登録
WEBデザインGoogleアナリティクスの使い方
WEBデザインGoogle検索結果ページを削除する
WEBデザインGoogleトレンド
WEBデザインGoogle AdWords[キーワードツール]
WEBデザイン関連ワードを調べる
WEBデザイン急上昇ワードを調べる
サンプルプログラム
WEBデザインcolorpicker
WEBデザインcolorbox
WEBデザインcolorbox[2]
WEBデザインnewsticker[1]
WEBデザインnewsticker[2]上にスクロール
WEBデザインnewsticker[3]左へスクロール
WEBデザインnewsticker[4]左へスクロール
WEBデザインCycle Plugin(+ Easing Plugin)
WEBデザインCoin Slider
WEBデザインスライダー[1]下にサムネイル画像
WEBデザインスライダー[2]右にサムネイル画像
WEBデザインスライダー[3]左右矢印 下にコントロールあり
WEBデザインスライダー[4]左右矢印 下にコントロールなし
WEBデザインスライダー[5]左右矢印 下にコントロールあり(stop付き)
WEBデザインスライダー[6]画像外の左右矢印
WEBデザインスライダー[7]自動切り替え
WEBデザインスライダー[8]自動切り替え
WEBデザインスライダー[9]自動切り替え
WEBデザインcss3[transition]
WEBデザインリストとグリッド切り替え表示する[javascript-cssデザイン]
WEBデザインMarquee jQuery[上にスクロール]
WEBデザインDD_belatedPNGの使い方[透過処理PNG]
WEBデザインナビボタンのロールオーバー[CSS]
WEBデザインナビボタンのロールオーバー[JS(jQuery)]
WEBデザインナビボタンのロールオーバー[JS滑らかに切り替わる]
WEBデザインPHPで画像認証をする
その他
WEBデザイン広告をブログに張る[クリック課金]
 ∟忍者AdMax
 ∟グーグルAdSense
WEBデザインレンタルサーバ・VPS情報
WEBデザインポイントサイト情報
WEBデザインアドネットワーク情報
WEBデザイン無料のアクセス解析ツール(オープンソース等)
WEBデザイン無料アクセス解析の導入
WEBデザインブログランキングサイト一覧
WEBデザインsitemap.xmlを作成する
WEBデザインSEO対策 Google AdWords(キーワードツール)
WEBデザインSEO対策 SEOTOOLS
WEBデザインSEO対策 SEOチェキ