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

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

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

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

Q&A

解決済

1回答

1475閲覧

iphoneからメール送信した画像の向き

avantgarden

総合スコア121

PHP

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

0グッド

1クリップ

投稿2018/05/28 11:14

編集2018/05/29 03:29
$input = file_get_contents("php://stdin");

で受け取ったメールをmail_mimeDecodeで処理しているのですが、
iPhoneから送られた画像を保存すると、縦向きの画像が横向きで保存されます。

調べてみると、iPhoneの場合は縦向きでも横向きで保存されるらしく、
'orientation'という値をいじれば良いところまではわかったのですが、
上記のやり方の場合、向きを直すことは可能でしょうか。

<追記>
「上記のやり方の場合、向きを直すことは可能でしょうか。」
こちらですが、
file_get_contents、mail_mimeDecodeで画像を取得、保存した場合、
その画像情報から'orientation'の変更が可能か、という意味です。

誤解する表現でしたので、追記いたします。

<追記(メール情報から画像をファイル保存するまでの処理>

<?php $input = file_get_contents("php://stdin"); $structure = mail_mimeDecode($input); if (strtolower($structure->ctype_primary) == "multipart") { $images = getImage($structure->parts); } reset($images); // 拡張子を格納 $ext = ''; $count = 0; $count_max = count($images); foreach ($images as $image) { if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/gif' || $image['type'] == 'image/png') { $count++; // ファイルとして保存($pathDir_tmpImageは一時ファイルを保存するディレクトリ名です) $tmp_path = tempnam($pathDir_tmpImage, 'img_'); if ($tmp_path == false) { break; } $fp = fopen($tmp_path, 'w'); if ($fp == false) { break; } fwrite($fp, $image['body']); fclose($fp); // ここから、一時ファイルを加工して別ディレクトリに保存します。(*) } function mail_mimeDecode($input){ list($headers,$body) = splitBodyHeader($input); return decode($headers, $body); } function splitBodyHeader($input){ if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $match)) { return array($match[1], $match[2]); } return false; } function getImage($parts) { $images = array(); foreach( $parts as $part ){ print($part->ctype_primary. '/'.$part->disposition .'<br />'); // タイプ判別 if (isset($part->disposition) && (strtolower($part->disposition) == "attachment")) { $images[] = array( 'type' => strtolower(sprintf("%s/%s",$part->ctype_primary, $part->ctype_secondary)), 'name' => $part->ctype_paramaters['name'], 'body' => $part->body, ); } else { switch(strtolower($part->ctype_primary)){ case "image": $images[] = array( 'type' => strtolower(sprintf("%s/%s", $part->ctype_primary, $part->ctype_secondary)), 'name' => $part->crype_paramaters['name'], 'body' => $part->body, ); break; case "multipart": $images = array_merge($images, getImage($part->parts)); break; default: break; } } } return $images; } ?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

上記のやり方の場合、向きを直すことは可能でしょうか。

結論を言うと可能です。

PHPの場合、Exif関数でorientationの値を取得できます。

exif_read_data

かなり以前に作ったクラスファイルがあったので参考にして見てください。

PHP画像操作クラス

投稿2018/05/28 13:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

avantgarden

2018/05/28 13:33

ご回答ありがとうございます。 すみません。質問の表現がまずかったので<追記>にて補足いたしました。 どうも私の方法だと、orientationが取れない(どこかで無くなっている)ようなのです…。
退会済みユーザー

退会済みユーザー

2018/05/28 13:34

> orientationが取れない(どこかで無くなっている)ようなのです…。 どんなコードでどう実行したのかを記述してくれないとコメントのしようがありません。 ただし、書き換えると考えるとダメ。書き換えはできません。Orientationの値を使って画像を加工すると考えます。
avantgarden

2018/05/29 03:32

メール情報を取得して、画像を一時ファイルに保存するまでの処理を追記しました。 この一時ファイルに対して、(*)の箇所でリサイズを行って別ディレクトリに保存しています。 Orientationの値を使って画像を加工するとしたらこの部分で行うことになると思うのですが、それが可能かどうか教えていただきたいです。
avantgarden

2018/05/29 04:06

すみません。 $tmp_path に対し、 $exif = exif_read_data($tmp_path); でexif情報を取ることに成功し、$exifの中身自体は文字化けしていたのですが、 $exif['Orientation']で値は取れました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問