php imagejpeg() 函数会破坏 png 图像

我有一个php名为的函数compressImage(),如下所示:


function compressImage($source, $destination, $quality) {


    $info = getimagesize($source);



    if ($info['mime'] == 'image/jpeg') 

      $image = imagecreatefromjpeg($source);


    elseif ($info['mime'] == 'image/gif') 

      $image = imagecreatefromgif($source);


    elseif ($info['mime'] == 'image/png') 

      $image = imagecreatefrompng($source);


    imagejpeg($image, $destination, $quality);


  }

我正在尝试使用此功能压缩上传的图像。在一个php名为的文件中add1.php,我这样调用这个函数:


if (!empty($_FILES['image1']['name'])) {


    $temp = explode(".", $_FILES["image1"]["name"]);

    $newName = date('Ymdhis')."1";

    $newName = strval($newName) . "." . end($temp);

    $newPath = '../uploads/'.$newName;


    move_uploaded_file($_FILES['image1']['tmp_name'], $target_dir . $newName);

    compressImage($newPath, $newPath, 60);

    $image1 = $newName;


}

这在我上传jpeg图像时有效,它实际上减小了它们的大小。但是当我上传png文件时,它们已上传但已损坏且无法打开。我不知道这个问题的原因是什么。任何帮助,将不胜感激。谢谢


qq_花开花谢_0
浏览 178回答 2
2回答

喵喔喔

您可以修改compressImage它,使其生成与提供的格式相同的图像,并在需要时使用函数的返回值进行进一步处理。function compressImage( $source=false, $destination=false, $quality=80, $filters=false ) {&nbsp; &nbsp; $info = getimagesize( $source );&nbsp; &nbsp; switch( $info['mime'] ){&nbsp; &nbsp; &nbsp; &nbsp; case 'image/jpeg':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* Quality: integer 0 - 100 */&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( !is_int( $quality ) or $quality < 0 or $quality > 100 ) $quality=80;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $image = imagecreatefromjpeg( $source );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return imagejpeg( $image, $destination, $quality );&nbsp; &nbsp; &nbsp; &nbsp; case 'image/gif':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $image = imagecreatefromgif( $source );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return imagegif( $image, $destination );&nbsp; &nbsp; &nbsp; &nbsp; case 'image/png':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* Quality: Compression integer 0(none) - 9(max) */&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( !is_int( $quality ) or $quality < 0 or $quality > 9 )$quality=6;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $image = imagecreatefrompng( $source );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return imagepng( $image, $destination, $quality, $filters );&nbsp; &nbsp; &nbsp; &nbsp; case 'image/webp':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* Quality: Compression 0(lowest) - 100(highest) */&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( !is_int( $quality ) or $quality < 0 or $quality > 100 )$quality=80;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $image=imagecreatefromwebp( $source );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return imagewebp( $image, $destination, $quality );&nbsp; &nbsp; &nbsp; &nbsp; case 'image/bmp':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* Quality: Boolean for compression */&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( !is_bool( $quality ) )$quality=true;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $image=imagecreatefrombmp( $source );&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return imagebmp( $image, $destination, $quality );&nbsp; &nbsp; &nbsp; &nbsp; default:exit( sprintf( 'Unknown type: %s',$info['mime'] ) );&nbsp; &nbsp; }}使用返回值if( compressImage($newPath, $newPath, 60) ){ /* success */ }else { /* Failure */ }

慕无忌1623718

imagejpeg在所有情况下,您都在使用;编写图像&nbsp;还有 GIF 和 PNG 文件。
打开App,查看更多内容
随时随地看视频慕课网APP