我有来自文件夹的MB大小的图像,当我填充它所有需要时间来加载我的页面时,我想在显示NOT上传时将每个图像大小从mb减少到kb。我所发现的只是减小尺寸,而上传如何显示是否可能?
foreach ($sql_getEachImage->results() as $res_child1) {
$ext = pathinfo($res_child1->file_name, PATHINFO_EXTENSION);
if($ext == "jpg" || $ext == "png" || $ext == "jpeg" || $ext == "gif"){
$image_path = "ajax/news/".$res_child1->file_name;
echo'<div>';
howCanIreduceThisMbSizeImage($image_path, 70);
echo'</div>';
}else{
echo'<div style="">';
echo $res_child1->file_name;
echo'</div>';
}
}
答案 0 :(得分:0)
您可以使用gd library
调整图片大小。
您可以创建一个将所有图像保存为jpeg的方法,因为它具有最小的文件大小,您无法动态执行此操作,因为您需要向浏览器发送标头以告知它是什么类型你正在发送的文件。您可以创建一种方法来保存较小版本的图像并检查该图像:
<?php
function reduceImageSize($source, $destination, $quality = 80)
{
// Create image based on mime type send the correct header
switch (mime_content_type($source)) {
case 'image/jpeg':
$im = imagecreatefromjpeg($source);
break;
case 'image/gif':
$im = imagecreatefromgif($source);
break;
case 'image/png':
$im = imagecreatefrompng($source);
break;
default:
// Image isn't jpeg, gif or png
throw new Exception('Unknown file type');
break;
}
// Always save as jpeg
$path = pathinfo($destination, PATHINFO_DIRNAME);
$basename = pathinfo($destination, PATHINFO_BASENAME);
// Save reduced file
imagejpeg($im, $path . '/' . $basename . '.jpg', $quality);
// Clean up
imagedestroy($im);
}
// Loop through images and reduce size
foreach ($sql_getEachImage->results() as $res_child1) {
try {
$basename = pathinfo($res_child1->file_name, PATHINFO_BASENAME);
$filename = 'ajax/news/small/' . $basename . '.jpg';
if (!file_exists($filename)) {
reduceImageSize('ajax/news/' . $res_child1->file_name, $filename, 70);
}
echo '<div>' . $filename . '</div>';
} catch (Exception $e) {
echo '<div style="">' . $res_child1->file_name . '</div>';
}
}
只有在尺寸减小的情况下,图像才会尝试调整大小,并将其保存为质量较低的jpeg。
答案 1 :(得分:0)
不要将100作为imagejpeg()的质量,尝试50并向下工作,直到质量和大小可以接受为止。
imagejpeg($image, $savename, 50) ;