为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_花开花谢_0 2022-10-22 15:23:24
我有一个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文件时,它们已上传但已损坏且无法打开。我不知道这个问题的原因是什么。任何帮助,将不胜感激。谢谢
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以修改compressImage它,使其生成与提供的格式相同的图像,并在需要时使用函数的返回值进行进一步处理。


function compressImage( $source=false, $destination=false, $quality=80, $filters=false ) {

    $info = getimagesize( $source );

    switch( $info['mime'] ){

        case 'image/jpeg':

            /* Quality: integer 0 - 100 */

            if( !is_int( $quality ) or $quality < 0 or $quality > 100 ) $quality=80;

            $image = imagecreatefromjpeg( $source );

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


        case 'image/gif':

            $image = imagecreatefromgif( $source );

            return imagegif( $image, $destination );


        case 'image/png':

            /* Quality: Compression integer 0(none) - 9(max) */

            if( !is_int( $quality ) or $quality < 0 or $quality > 9 )$quality=6;

            $image = imagecreatefrompng( $source );

            return imagepng( $image, $destination, $quality, $filters );


        case 'image/webp':

            /* Quality: Compression 0(lowest) - 100(highest) */

            if( !is_int( $quality ) or $quality < 0 or $quality > 100 )$quality=80;

            $image=imagecreatefromwebp( $source );

            return imagewebp( $image, $destination, $quality );


        case 'image/bmp':

            /* Quality: Boolean for compression */

            if( !is_bool( $quality ) )$quality=true;

            $image=imagecreatefrombmp( $source );

            return imagebmp( $image, $destination, $quality );


        default:exit( sprintf( 'Unknown type: %s',$info['mime'] ) );

    }

}

使用返回值


if( compressImage($newPath, $newPath, 60) ){ /* success */ }

else { /* Failure */ }


查看完整回答
反对 回复 2022-10-22
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

imagejpeg在所有情况下,您都在使用;编写图像 还有 GIF 和 PNG 文件。



查看完整回答
反对 回复 2022-10-22
  • 2 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信