0

アップロードされた画像が大きすぎる場合、PHPで画像のサイズを変更しようとしています。ファイルのサイズを変更してから(うまくいけば)配列を返す関数を作成しましたが、機能していない場合を除きます:(

private function _resizeImage($image, $width = 780, $height = 780) {

    $imgDetails = GetImageSize($image["tmp_name"]);

    // Content type
    //header("Content-Type: image/jpeg");
    //header("Content-Disposition: attachment; filename=resized-$image");

    // Get dimensions
    $width_orig = $imgDetails['0'];
    $height_orig = $imgDetails['1'];

    $ratio_orig = $width_orig/$height_orig;

    if ($width/$height > $ratio_orig) {
       $width = $height*$ratio_orig;
    } else {
       $height = $width/$ratio_orig;
    }

    // Resample
    switch ( $imgDetails['2'] ) 
    {
      case 1: $newImage = imagecreatefromgif($image["tmp_name"]); break;
      case 2: $newImage = imagecreatefromjpeg($image["tmp_name"]); break;
      case 3: $newImage = imagecreatefrompng($image["tmp_name"]); break;
      default: trigger_error('Unsupported filetype!', E_USER_WARNING);  break;
    }

    if (!$newImage) {
        // We get errors from PHP's ImageCreate functions...
        // So let's echo back the contents of the actual image.
        readfile ($image);
    } else {
        // Create the resized image destination
        $thumb = @ImageCreateTrueColor ($width, $height);
        // Copy from image source, resize it, and paste to image destination
        @ImageCopyResampled ($thumb, $newImage, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
        // Output resized image
        //ImageJPEG ($thumb);
    }

    // Output
    $newFile = imagejpeg($thumb, null, 100);
    return $newFile;
}

これはによって呼び出されます:

if($imgDetails['0'] > 780 || $imgDetails['1'] < 780) {
    $file = $this->_resizeImage($file); // Resize image if bigger than 780x780
} 

しかし、私はオブジェクトを取り戻せません、そして私は理由がわかりません。

4

1 に答える 1

1

Seainがコメントで述べたように、imagejpegはbool値を返します。

bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )

Returns TRUE on success or FALSE on failure.

php.netのimagejpegリファレンス

また、画像を生の画像ストリームとして出力する2番目のパラメータとしてNULLがあります。画像をファイルのどこかに保存する場合は、このパラメータのファイル名を指定する必要があります。

別の注意imagedestroy($newImage);-gif/jpeg/pngから画像を作成したときに割り当てたメモリを解放するために呼び出す必要があります。を呼び出した後にこれを行いますimagejpeg

@また、演算子を使用してエラーを抑制しないことをお勧めします。代わりに、それらのエラーをエラーログに記録してみてください。抑制すると、コードのデバッグが困難になります。重大なエラーが発生した場合、抑制すると、理由がわからずにスクリプトが完全に強制終了されます。エラーログが役立ちます。

于 2013-03-08T20:13:39.847 に答える