基本上,我试图将从FTP下载的图像及其预览显示到下拉列表中。好吧,我做到了,但是我最近注意到大图像以其完整尺寸加载,并且网站上的动画和内容变得非常笨拙(并且也是第一次加载)。 然后,我受互联网的各种启发,编写了以下代码。我设法使其正常工作,但现在网站加载速度甚至更慢。怎么了?我是否放弃了这个想法,只是每次上传图像时都将预览图像上传到我的FTP,还是可以加快速度?
function endsWith($haystack, $needle) {
$length = strlen($needle);
if ($length == 0) {
return true;
}
return (substr($haystack, -$length) === $needle);
}
function resize_image($file, $w) {
list($width, $height) = getimagesize($file);
$newwidth = $w;
$newheight = ($w * $height) / $width;
if (endsWith($file, '.png')) {
$src = imagecreatefrompng($file);
} else if (endsWith($file, '.jpeg') || endsWith($file, '.jpg')) {
$src = imagecreatefromjpeg($file);
} else if (endsWith($file, '.webp')) {
$src = imagecreatefromwebp($file);
} else if (endsWith($file, '.gif')) {
$src = imagecreatefromgif($file);
}
$dst = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
return $dst;
}
$images = scandir(__DIR__.
'/'.
'uploads/'.$_SESSION['id']);
$images = array_values(array_diff($images, array('.', '..', 'comments')));
for ($i = 0; $i < count($images); $i++) {
$img = $images[$i];
$id = $_SESSION['id'];
$imga = resize_image(__DIR__.
'/'.
'uploads/'.$_SESSION['id'].
'/'.$img, 100);
ob_start();
imagejpeg($imga, NULL, 100);
imagedestroy($imga);
$imgb = ob_get_clean();
$imgb = base64_encode($imgb);
echo << EOL;
<option value="$img" data-icon="data:image/jpeg;base64,$imgb">$img</option>
EOL;
}
输出到div:
<div class="your-files input-field col s12 m6" id="your-avatars">
<select class="icons">
<option selected disabled value="default">Wybierz obrazek...</option>
<!-- here comes the PHP output -->
</select>
</div>