$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;
}