4

私は次のコードを持っています

 // load image and get image size
  $img = imagecreatefrompng( "{$pathToImages}{$fname}" );

  $width = imagesx( $img );
  $height = imagesy( $img );


  // calculate thumbnail size
  $new_width = $imageWidth;
  $new_height = 500;

  // create a new temporary image
  $tmp_img = imagecreatetruecolor( $new_width, $new_height );

  // copy and resize old image into new image 
  imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

一部の画像では正常に動作しますが、特定の画像では次のようなエラーが表示されます

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: 

Warning: imagesx() expects parameter 1 to be resource, boolean given

Warning: imagesy() expects parameter 1 to be resource, boolean given

私も有効にしました

gd.jpeg_ignore_warning = 1

php.iniで

助けていただければ幸いです。

4

5 に答える 5

5

(2010年2月)のブログ投稿によると、実装のバグimagecreatefromjpegが返されるはずfalseですが、代わりにエラーがスローされます。

解決策は、画像のファイルタイプを確認することです(完全に不要なため、重複する呼び出しを削除しましたimagecreatefromjpeg。以前に正しいファイルタイプを確認しており、他の理由でエラーが発生した場合は、正しくimagecreatefromjpeg返されます)。false

function imagecreatefromjpeg_if_correct($file_tempname) {
    $file_dimensions = getimagesize($file_tempname);
    $file_type = strtolower($file_dimensions['mime']);

    if ($file_type == 'image/jpeg' || $file_type == 'image/pjpeg'){
        $im = imagecreatefromjpeg($file_tempname);
        return $im;
    }
    return false;
}

次に、次のようにコードを記述できます。

$img = imagecreatefrompng_if_correct("{$pathToImages}{$fname}");
if ($img == false) {
    // report some error
} else {
    // enter all your other functions here, because everything is ok
}

もちろん、pngファイルを開きたい場合は(コードが示唆しているように)、pngに対して同じことを行うことができます。実際には、通常、ファイルが実際にどのファイルタイプを持っているかを確認してから、3つのファイル(jpeg、png、gif)の間で正しい関数を呼び出します。

于 2012-07-14T11:07:43.377 に答える
1
于 2012-07-14T11:33:39.353 に答える
0

動作する/動作しないファイルの例を教えてください。http://www.php.net/manual/en/function.imagecreatefromjpeg.php#100338によると、リモートファイル名の空白が問題を引き起こす可能性があります。

于 2012-07-14T11:08:51.870 に答える