1

アップロード時に元のjpegファイルからサムネイル画像を生成しています。これらのサムネイルファイルを実際に作成して別のディレクトリに移動することはできますが、問題は、アップロード中にこれらのサムネイルファイルが黒色しか表示されないことです。

私のコード。

if(isset($_POST['upload'])){
    $img = $_FILES['origin']['name'];
    move_uploaded_file($_FILES['origin']['tmp_name'], 'image/'.$img);

    define("SOURCE", 'image/');
    define("DEST", 'thumb/');
    define("MAXW", 120);
    define("MAXH", 90);

    $jpg = SOURCE.$img;

    if($jpg){
        list($width, $height, $type) = getimagesize($jpg); //$type will return the type of the image

        if(MAXW >= $width && MAXH >= $height){
            $ratio = 1;
        }elseif($width > $height){
            $ratio = MAXW / $width;
        }else{
            $ratio = MAXH / $height;
        }

        $thumb_width = round($width * $ratio); //get the smaller value from cal # floor()
        $thumb_height = round($height * $ratio);

        $thumb = imagecreatetruecolor($thumb_width, $thumb_height);

        $path = DEST.$img."_thumb.jpg";
        imagejpeg($thumb, $path);

        echo "<img src='".$path."' alt='".$path."' />";
    }
    imagedestroy($thumb);
}

サムネイルファイルは次のようになります。

ここに画像の説明を入力してください

4

2 に答える 2

3

PHPマニュアルから:

imagecreatetruecolor() returns an image identifier representing a black image of the specified size.

したがって、問題は、実際にこの黒い画像を作成して保存することです。

$thumb = imagecreatetruecolor($thumb_width, $thumb_height);

サイズ変更の解決策については、stackoverflowに関するこの質問を参照してください。

于 2012-06-17T17:30:51.053 に答える
2

うーん、今バグを見つけました。問題は、$jpg = SOURCE.$img;代わりにを使用することです。$jpg = imagecreatefromjpeg($jpg);また、を使用してサンプル画像を新しいサムネイル画像にコピーする必要があります。

imagecopyresampled( $thumb, $jpg, 0, 0, 0, 0, $thumb_width, $thumb_height, $width, $height );

その後、それは動作します!!!

この解決策に私を導いてくれたあなたの答えをアレックスに感謝します。

于 2012-06-17T17:46:25.117 に答える