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チェキ





