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

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

ただいまの
回答率

90.00%

imagerotateがうまくいかない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,586

toss

score 47

imagerotateを使用し、画像を回転して保存する処理をしたいのですが、うまくいきません。
どこがおかしいでしょうか?
よろしくお願いいたします。

    $image_name='test.jpg';
    $filename = 'http://hoge.jp/html/upload/temp_image/'.$image_name;
            $exif_data = exif_read_data($filename);

            // コンテントタイプ
            header('Content-type: image/jpeg');
            $source = imagecreatefromjpeg($filename);
            // 向きを表示
//            var_dump($source);
//            var_dump($exif_data['Orientation']);
//            exit();
            if( $exif_data['Orientation'] ==1){
                $angle = 90;
                $rotate = imagerotate($source, $angle, 0,0);
//                echo 'ok';//表示される
//                exit();
            }

            // 回転した画像を上書きする場合は、imagejpegの保存先パスに元ファイルと同じものを指定。
            imagejpeg($rotate, $filename, 10);
//            exit();
            // 最後にメモリの解放
            imagedestroy($source);
            imagedestroy($rotate);



                //ファイル保存
                if ( rename( "html/upload/temp_image/$image_name", "/usr/home/xxxxhogexxxx/html/html/upload/save_image/$image_name" ) ) {
} else {
                    $error = 1;
                }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • s8_chu

    2017/04/05 15:10

    保存する処理が途中で切れていますが、良いのでしょうか?

    キャンセル

  • ttyp03

    2017/04/05 15:15

    回転がNGなのか、保存がNGなのかどちらですか?またif($exif_data['Orientation'] ==1)の中には入っているのでしょうか。

    キャンセル

  • toss

    2017/04/05 17:51

    ファイル保存はできております。また、$exif_data['Orientation']に1も入っております。よろしくお願いいたします。

    キャンセル

回答 2

checkベストアンサー

+1

まず確認ですが、元になる画像が

$filename = 'http://hoge.jp/html/upload/temp_image/'.$image_name;


http://hoge.jp/で指定していますが、ネットワーク越しなんでしょうか。
renameではこの$filenameを使用せずに相対パスになっているので、ローカルなんですよね。きっと。

保存時も同じ$filenameを使用しているので、保存ができていないのかもしれません。

imagejpeg($rotate, $filename, 10);


ただ、先に挙げた質問では「保存はできている」という意味が何をもってしてできていると言っているのでしょうか。
元ファイルを上書きする設計になっているので、保存ができているのではなく、何も変わっていないだけなのではないでしょうか。

解決策ですが、元ファイルがローカルであるなら、$filenameを次のようにすれば良いような気がします。

$filename = 'http://hoge.jp/html/upload/temp_image/'.$image_name;
↓
$filename = 'html/upload/temp_image/'.$image_name;


元ファイルがネットワーク越しであるなら、imagejpegを次のようにすればよいでしょう。

imagejpeg($rotate, $filename, 10);
↓
imagejpeg($rotate, 'html/upload/temp_image/'.$image_name, 10);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/06 11:03

    おっしゃっている通り、 $filenameの変更でうまくいきました。
    ありがとうございました!

    キャンセル

+1

的外れかもしれませんが、以下のようにするとどうでしょうか?

<?php
$image_name = "image.jpg";
$savedir = "test.jpg";
$filename = "http://placehold.jp/3d4070/ffffff/150x150.jpg?text=image";
$exif_data = exif_read_data($filename);

$source = imagecreatefromjpeg($filename);

if ($exif_data["Orientation"] === 1) {
    $imageRotate = imagerotate(imagecreatefromjpeg($filename), 90, 0);
    header("Content-Type: image/jpeg");
    imagejpeg($imageRotate, "./" . $savedir);
    imagejpeg($imageRotate);
    imagedestroy($imageRotate);
}

if (rename("./" . $savedir, "./" . $image_name)) {
} else {
    $error = 1;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/06 11:03

    回答ありがとうございました!

    キャンセル

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

  • ただいまの回答率 90.00%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる