图片压缩(1次)

  • 只针对限定1M
    $data = file_get_contents("输入路径");
    $maxSize = 1 * 1024 * 1024;
    //图片进行压缩
    $data = compressImage($data, $maxSize);
    file_put_contents("输出路径", $data);
    function compressImage($data, $maxSize) {
        $size = strlen($data);
        $img = imagecreatefromstring($data);
        $width = imagesx($img);
        $height = imagesy($img);
        $percent = 1;
        $tmpWidth = $width;
        $tmpHeight = $height;
        while ($size > $maxSize) {
            $tmpPercent = round(log($maxSize, $size), 1);
            $tmpPercent = $tmpPercent == 1 ? $tmpPercent - 0.1 : $tmpPercent;
            $tmpWidth = $tmpWidth * $tmpPercent;
            $tmpHeight = $tmpHeight * $tmpPercent;
            $size = $tmpWidth * $tmpHeight / 0.95;//输出的是png,只适用于1M
            //$size = $tmpWidth * $tmpHeight / 8;//输出的是jpg
            $percent = $percent * $tmpPercent;
        }
        $newWidth = $width * $percent;
        $newHeight = $height * $percent;
        $newImg = imagecreatetruecolor($newWidth, $newHeight);
        imagecopyresampled($newImg, $img, 0, 0, 0, 0, floor($newWidth), floor($newHeight), $width, $height);
        ob_start(); //Turn on output buffering
        imagepng($newImg); //Generate your image
        $data = $output = ob_get_contents(); // get the image as a string in a variable
        ob_end_clean(); //Turn off output buffering and clean it
        imagedestroy($newImg);
        print_r("\npercent={$percent},newWidth={$newWidth},newHeight={$newHeight},size={$size}");
        return $data;
    }

     

posted @ 2019-08-22 15:34  好胖的兔子  阅读(191)  评论(0编辑  收藏  举报