$type = explode('/', $file->type);
$mainType = $type[0];
$subType = $type[1];
$isImage = $mainType == 'image';
$isGif = $subType == 'gif';//gif压缩会变静态的,所以过滤掉
if ($isImage) {
$maxSize = 1024 * 1024;
if (!$isGif) {
//图片进行压缩
$file->data = $this->compressImage($file->data, $maxSize);
}
//生成文件
}
function compressImage($data, $maxSize, $percent = 1) {
$size = strlen($data);
if ($size <= $maxSize) {
return $data;
}
$img = imagecreatefromstring($data);
$width = imagesx($img);
$height = imagesy($img);
$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
//imagejpeg($newImg);
$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);
$percent -= 0.1;
print_r("\npercent={$percent},size={$size}");
return self::compressImage($data, $maxSize,$percent);
}