質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

832閲覧

アイフォンで撮った画像が登録時に回転してしまう

k_m_pg

総合スコア6

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/02/04 07:02

先日にも同様の質問をさせて頂きましたものです。

あれから、コードを修正しているのですがなかなかうまくいっておらず、

再度投稿させて頂きました。

最終的に下記のコードを書いており、exif情報のOrientationを修正できていると思うのですが、
まだ回転した状態で画像が表示されてしまいます。

コード中にもコメントアウトをして書いておりますが、関数orientationFixedImage()を
実行後はexifのOrientationがnullになっており、修正できていると思っているのですが、、、

$gaikan_photo = $_FILES['gaikan_photo']; // 画像の左右反転 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); } // 画像の方向を正す function orientationFixedImage($after,$before){ $image = ImageCreateFromJPEG($before); $exif_datas = @exif_read_data($before); if(isset($exif_datas['Orientation'])){ $orientation = $exif_datas['Orientation']; if($image){ // 未定義 if($orientation == 0){ // 通常 }else if($orientation == 1){ // 左右反転 }else if($orientation == 2){ image_flop($image); // 180°回転 }else if($orientation == 3){ image_rotate($image,180, 0); // 上下反転 }else if($orientation == 4){ image_Flip($image); // 反時計回りに90°回転 上下反転 }else if($orientation == 5){ image_rotate($image,270, 0); image_flip($image); // 時計回りに90°回転 }else if($orientation == 6){ image_rotate($image,90, 0); // 時計回りに90°回転 上下反転 }else if($orientation == 7){ image_rotate($image,90, 0); image_flip($image); // 反時計回りに90°回転 }else if($orientation == 8){ image_rotate($image,270, 0); } } } // 画像の書き出し ImageJPEG($image ,$after); return false; } // iphoneで撮影した元画像 $before = "../../images/images_entrances/" . $gaikan_photo['name']; // 書き出し先の画像ファイル $after = "../../images/images_entrances/" . $gaikan_photo['name']; // $gaikan_photo['name']はechoすると「image0.jpeg」と出力されます. $exifBefore = exif_read_data($before); echo $exifBefore['Orientation'].'<br>'; // この時点ではexifのOrientationは3が表示されます。 // 画像の補正 orientationFixedImage($after,$before); $exifAfter = exif_read_data($after); echo $exifAfter['Orientation'].'<br>'; // この時点ではexifのOrientationはnullが表示されます。 ?> <table> <tr> <th style="height: 230px;"> <img src="../../images/images_entrances/img_shop.png" alt="外観写真"> </th> <td> <?php if ($gaikan_photo['name'] !== "") { if($gaikan_photo['size'] > 7000000) { echo '画像サイズが大きすぎます(7メガまでしかアップロードできません)'; } else { move_uploaded_file($gaikan_photo['tmp_name'], $after); echo '<div> <img id="preview" src="' . $after . '"> </div>'; } } else { echo '<div> <img id="preview" src="../../images/images_entrances/img_shop.png"> </div>'; } ?> </td> </tr> </table>

2度目の質問となりますが、どうかよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/02/04 07:08

過去質問にも何度か上がった話題かと思いますがそれらでは解決しなかったのでしょうか。 確認したこと調べたこと試したことを追記してください
guest

回答1

0

exif の Orientation 情報を削ってしまうと、「回転した状態で保存されていない」という扱いになるので、データ自体の天地左右が合う状態になっていないとダメです。

で、補正処理をしてるようではありますが、

PHP

1function image_rotate($image, $angle, $bgd_color){ 2 return imagerotate($image, $angle, $bgd_color, 0); 3} 4 5... 6 7// 画像の方向を正す 8 }else if($orientation == 3){ 9 image_rotate($image,180, 0);

折角 image_rotate で補正した情報を捨ててますよ?
となると結局、画像の天地左右が変わらないまま、orientation の情報だけが消えるという悲惨なことになってます。

投稿2020/02/07 00:58

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問