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因为它完全是多余的;我们之前已经检查过正确的文件类型,如果由于其他原因发生错误,imagecreatefromjpegfalse正确返回):

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 做同样的事情。实际上,通常您会检查您的文件真正具有的文件类型,然后在这三个(jpeg、png、gif)之间调用正确的函数。

于 2012-07-14T11:07:43.377 回答
1
于 2012-07-14T11:33:39.353 回答
1

我对这个问题的解决方案:检测 imagecreatefromjpeg 是否返回“false”,在这种情况下,请在 file_get_contents 上使用 imagecreatefromstring。为我工作。请参阅下面的代码示例:

$ind=0;
do{
    if($mime == 'image/jpeg'){
        $img = imagecreatefromjpeg($image_url_to_upload);
    }elseif ($mime == 'image/png') {
        $img = imagecreatefrompng($image_url_to_upload);
    }
    if ($img===false){
        echo "imagecreatefromjpeg error!\n";
    }
    if ($img===false){
        $img = imagecreatefromstring(file_get_contents($image_url_to_upload));
    }
    if ($img===false){
        echo "imagecreatefromstring error!\n";
    }
    $ind++;
}while($img===false&&$ind<5);
于 2019-02-24T16:54:28.687 回答
0

你能举出任何文件做/不工作的例子吗?根据http://www.php.net/manual/en/function.imagecreatefromjpeg.php#100338远程文件名中的空白可能会导致问题。

于 2012-07-14T11:08:51.870 回答
0

如果您使用 URL 作为图像的来源,则需要确保启用 php 设置 allow_url_fopen。

于 2019-07-15T12:59:43.630 回答