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

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

ただいまの
回答率

90.84%

  • PHP

    18644questions

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

PHPで、アップされた(POST)画像を指定サイズにリサイズして、その画像を表示しようとしています。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 109

ochiba2525

score 6

前提・実現したいこと

PHPで、アップされた(POST)画像を指定サイズにリサイズして、その画像を表示しようとしています。

発生している問題・エラーメッセージ

結果ブラウザに表示されるのは、画像ではなく、以下になっています。

Resouse id #7

該当のソースコード

$file_name = $_FILES["upload_file"]["name"];
$tmp_path = $_FILES["upload_file"]["tmp_name"];
$file_dir_path = "$dir_path/".$file_name;
$img="";

if(is_uploaded_file($tmp_path)){
    if( move_uploaded_file( $tmp_path, $file_dir_path)){
        chmod($file_dir_path, 0644);
        $img = '<img id=p_img src="'.$file_dir_path.'">'; 
        }
    }else{
        echo'move file error';
}
list($original_width, $original_height) = getimagesize($file_dir_path);
 echo $original_width;
 echo $original_height;
//元画像の比率を計算し、高さを設定
$new_width = 100;
$proportion = $original_width / $original_height;
$new_height = $new_width / $proportion;

//高さが幅より大きい場合は、高さを幅に合わせ、横幅を縮小
if($proportion < 1){
    $new_height = $new_width;
    $new_width = $new_width * $proportion;
}

$file_type = strtolower(end(explode('.', $file_dir_path)));
echo $file_type;
if ($file_type === "jpg" || $file_type === "jpeg") {

    $original_image = ImageCreateFromJPEG($file_dir_path); //JPEGファイルを読み込む
    $new_image = ImageCreateTrueColor($new_width, $new_height); // 画像作成

} elseif ($file_type === "gif") {

    $original_image = ImageCreateFromGIF($file_dir_path); //GIFファイルを読み込む
    $new_image = ImageCreateTrueColor($new_width, $new_height); // 画像作成

    /* ----- 透過問題解決 ------ */
    $alpha = imagecolortransparent($original_image);  // 元画像から透過色を取得する
    imagefill($new_image, 0, 0, $alpha);       // その色でキャンバスを塗りつぶす
    imagecolortransparent($new_image, $alpha); // 塗りつぶした色を透過色として指定する

} elseif ($file_type === "png") {

    $original_image = ImageCreateFromPNG($file_dir_path); //PNGファイルを読み込む
    $new_image = ImageCreateTrueColor($new_width, $new_height); // 画像作成

    /* ----- 透過問題解決 ------ */
    imagealphablending($new_image, false);  // アルファブレンディングをoffにする
    imagesavealpha($new_image, true);       // 完全なアルファチャネル情報を保存するフラグをonにする

} else {
    // 何も当てはまらなかった場合の処理は書いてませんので注意!
    return;

}
echo $new_image;

// 元画像から再サンプリング
ImageCopyResampled($new_image,$original_image,0,0,0,0,$new_width,$new_height,$original_width,$original_height);

echo $new_image;

// 画像をブラウザに表示
if ($file_type === "jpg" || $file_type === "jpeg") {
    // ImageJPEG($new_image);
} elseif ($file_type === "gif") {
    ImageGIF($new_image);
} elseif ($file_type === "png") {
    ImagePNG($new_image);
}

// メモリを開放する
imagedestroy($new_image);
imagedestroy($original_image);

?>

試したこと

POSTされてきた画像データの受取は、ここでは省略していますが、受取確認はできています。

補足情報(言語/FW/ツール等のバージョンなど)

以下の記事を参考にしています。
http://blog.shuffleee.com/1772/
http://www.kaasan.info/archives/2343
https://qiita.com/yuwaita/items/22a296bdf1898acbd70f

よろしくお願いいたします。(泣)

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+2

imageXXX()自体が出力関数です。

echo $new_image;

などは付けてはいけません。
header()をつけてimageXXXで出力してください

header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+2

結果をどう表示してるのかはわからないので受取後はどのようにしてるかわかりませんが、
さくっと見た限り
$new_image
はリソースIDであり、途中echoで出力されてるので、その表示(Resouse id #7)がされるのかと思います。
ので、echoは全て無くして
imagepng
imagejpeg
imagegif
だけにしたらうまくいくような気がします(メモリを開放する処理は必要です

http://php.net/manual/ja/function.imagepng.php

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

同じタグがついた質問を見る

  • PHP

    18644questions

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

  • トップ
  • PHPに関する質問
  • PHPで、アップされた(POST)画像を指定サイズにリサイズして、その画像を表示しようとしています。