お世話なります。dropzone.jsでファイルアップロードしたとき、スマホの画像の向きを補正したいと考えています。
テストとして単体のファイルを用意し実行すると、補正されるまで確認出来ているのですが、dropzone.jsで画像を渡すと、スクリプトが途中で止まっているような現象となっています。
※画像を渡している先は、upload.phpである。
※画像はアップされるが、upload.phpが途中で止まっているのか、エラーが起きているかで全ての処理が実行されない。
お恥ずかしいと思いながらも、以下が実際のファイル(upload.php)です。
コメントで補正部分のスクリプトを示しました。
ここ数日、試行錯誤を繰返していますが、補正スクリプトを加えるとファイル(upload.php)が適正に実行されないという状況が続いています。
お忙しい中恐縮ですが、アドバイスのほどお願い出来れば幸いです。
よろしくお願いいたします。
<?php session_start(); include($_SERVER['DOCUMENT_ROOT'] . '/define/BasicData.php'); $member_no = $_SESSION["member_no"]; $member_id = $_SESSION["member_id"]; require_once("../../../../security/bonpli/config.php"); $ds = DIRECTORY_SEPARATOR; $storeFolder = "./main_img/"; if(!empty($_FILES)){ $tempFile = $_FILES["file"]["tmp_name"]; $targetPath = dirname( __FILE__ ).$ds.$storeFolder.$ds; $filename = $_FILES["file"]["name"]; $file = explode('.', $filename); $kakuchousi = array_pop($file); $times=microtime(); $machining_time=explode(" ",$times); $format_time=$machining_time[1]+$machining_time[0]; $time = $format_time * 10000; $time = substr($time, -6); $img_filename = $member_no."-".$time.".".$kakuchousi; if(isset($_SESSION["img_filename"]) OR $_SESSION["img_filename"] != ""){ $_SESSION["img_filename"] .= ",".$img_filename; } else{ $_SESSION["img_filename"] .= $img_filename; } $targetFile = $targetPath.$img_filename; $filename = $_FILES["file"]["name"]; $file = explode(".", $filename); $file_name = $file[0]; move_uploaded_file($tempFile,$targetFile); $upfile = $storeFolder.$img_filename; //*** ↓↓ 補正スクリプト ↓↓ *** $image = orientationFixedImage($upfile, $upfile); // 画像の方向を正す function orientationFixedImage($output,$input){ $image = ImageCreateFromJPEG($input); $exif_datas = @exif_read_data($input); if(isset($exif_datas['Orientation'])){ $orientation = $exif_datas['Orientation']; if($image) { // 未定義 if($orientation == 0) { // 通常 }else if($orientation == 1) { // 左右反転 }else if($orientation == 2) { $image = image_flop($image); // 180°回転 }else if($orientation == 3) { $image = image_rotate($image, 180, 0); // 上下反転 }else if($orientation == 4) { $image = image_flip($image); // 反時計回りに90°回転 上下反転 }else if($orientation == 5) { $image = image_rotate($image, 90, 0); $image = image_flip($image); // 反時計回りに270°回転 }else if($orientation == 6) { $image = image_rotate($image, 270, 0); // 反時計回りに270°回転 上下反転 }else if($orientation == 7) { $image = image_rotate($image, 270, 0); $image = image_flip($image); // 反時計回りに90°回転 }else if($orientation == 8) { $image = image_rotate($image, 90, 0); } } } // 画像の書き出し ImageJPEG($image ,$output); return $image; } // 画像の左右反転 function image_flop($image){ // 画像の幅を取得 $w = imagesx($image); // 画像の高さを取得 $h = imagesy($image); // 変換後の画像の生成(元の画像と同じサイズ) $destImage = @imagecreatetruecolor($w,$h); // 逆側から色を取得 for($i=($w-1);$i>=0;$i--){ for($j=0;$j<$h;$j++){ $color_index = imagecolorat($image,$i,$j); $colors = imagecolorsforindex($image,$color_index); imagesetpixel($destImage,abs($i-$w+1),$j,imagecolorallocate($destImage,$colors["red"],$colors["green"],$colors["blue"])); } } return $destImage; } // 上下反転 function image_flip($image){ // 画像の幅を取得 $w = imagesx($image); // 画像の高さを取得 $h = imagesy($image); // 変換後の画像の生成(元の画像と同じサイズ) $destImage = @imagecreatetruecolor($w,$h); // 逆側から色を取得 for($i=0;$i<$w;$i++){ for($j=($h-1);$j>=0;$j--){ $color_index = imagecolorat($image,$i,$j); $colors = imagecolorsforindex($image,$color_index); imagesetpixel($destImage,$i,abs($j-$h+1),imagecolorallocate($destImage,$colors["red"],$colors["green"],$colors["blue"])); } } return $destImage; } // 画像を回転 function image_rotate($image, $angle, $bgd_color){ return imagerotate($image, $angle, $bgd_color, 0); } //*** ↑↑ 補正スクリプト ↑↑ *** list($width,$height) = getimagesize($upfile); //幅を825pxに縮小 if($width > 825){ $hiritsu = 825 / $width; $width_edit = floor($width * $hiritsu); $height_edit = floor($height * $hiritsu); if($kakuchousi == "jpeg" OR $kakuchousi == "jpg" OR $kakuchousi == "JPEG" OR $kakuchousi == "JPG"){ $src = imagecreatefromjpeg($upfile); } if($kakuchousi == "png" OR $kakuchousi == "PNG"){ $src = imagecreatefrompng($upfile); } if($kakuchousi == "gif" OR $kakuchousi == "GIF"){ $src = imagecreatefromgif($upfile); } $dst = imagecreatetruecolor($width_edit, $height_edit); imagecopyresampled($dst, $src, 0, 0, 0, 0, $width_edit, $height_edit, $width, $height); imagejpeg($dst, $upfile); } $timestamp = time(); $query = "INSERT INTO b2b_img_upload_temp (temp_no, temp_member_no, temp_img, temp_time) VALUES (0, '$member_no', '$img_filename', '$timestamp')"; mysqli_query($mysqli, $query); } ?>
■追記
適正に実行されない・・・説明が不十分でした。
やりたいことは、
「画像をアップ → 適正な向きに補正 → サイズの変更 → DBにインサート」
なのですが、ご提示したスクリプトを実行すると、「サイズの変更」以降が実行されない状況です。向きの補正をする部分をコメントで示していますが、この部分、単体では問題ないものの、上記のように組み立てるとそこで止まっているような状況です。
アドバイスのほど頂戴出来れば幸いです。
よろしくお願いいたします。
■追記➁
色々と追加修正のご依頼ありがとうございます。
dropzone.jsにてupload.php(上記スクリプト)に渡しているので(直接アクセスしていない)Timeoutしている感はないのですが、状況をご説明すると、「正常に返答はあるが、サイズ変更、そしてテーブルへのインサートが実行されていない」という感じです。
補正スクリプト部だけの単体のファイルで実行すると(アップされている画像は)補正されます。
またupload.php も補正スクリプト部を外すと(補正はされないが)正常にサイズ変更、テーブルへのインサートは実行されます。
現状、上記2つを組み合わせるべく試行錯誤を繰返しているのですが、いずれも上手く行かない状況です。
引き続き、アドバイスのほど頂戴出来れば幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー