PHP在不保存文件的情况下调整图像大小

时间:2012-12-27 20:19:04

标签: php image gd image-resizing

我的图片在我的网站上显示为缩略图。缩略图的大小差异很大。理想情况下,我不必在每个缩略图的尺寸中保存每张照片的副本。相反,我可以在PHP中指定最终尺寸,并在从服务器发送图像之前调整图像大小。

尝试在将照片上传到服务器时调整照片大小。我能够以每个缩略图大小保存图像。

问题是缩略图的大小因页面布局而异。因此,如果我将图像保存为每个缩略图大小,我将节省大约20倍的照片数量。

我尝试保存'小''中'和'大'图像,然后我调用最接近缩略图大小的图像。看起来有点粗糙,但听起来这可能是正确的方法。

3 个答案:

答案 0 :(得分:3)

好吧,因为你不想耗尽你的磁盘空间,你将耗尽你的CPU资源,这更糟糕 即使您认为您无法在磁盘上保存缩略图,您也必须这样做。没有其他办法。你只是浪费你的时间,最终转向正确的设置。

答案 1 :(得分:3)

我做过类似的事情,你可以做的就像这样,就像之前发布的那样可以消耗大量的资源,而保存到磁盘通常会更好,但是如果你真的想要这样做,那就试一试:< / p>

<?php

function createThumbnail($filename, $thumbWidth){
    $details = getimagesize($filename);
    $content = file_get_contents($filename);
    $srcImg = imagecreatefromstring($content);
    $thumbHeight = $details[1] * ($thumbWidth / $details[0]);
    $thumbImg = imagecreatetruecolor($thumbWidth, $thumbHeight);
    imagecopyresampled($thumbImg, $srcImg, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $details[0], $details[1]);
    imagejpeg($thumbImg, null, 100);
    imagedestroy($srcImg);
    return $thumbImg;
}

header("Content-Type: image/jpeg");
echo createThumbnail("/path/to/image.jpg", 200);

答案 2 :(得分:-1)

执行此操作的最佳方法当然是计算图像大小并使用适当的属性返回img标记,如下所示:

"<img width=\"" . $width . "px\" height=\"" . $height . "\" src="..."/>"

“动态”调整图像大小非常耗时。考虑这样一种情况,即您显示20个图像,每个图像将缩放150ms(取决于图像的大小和比例因子)。显示单页大约需要3秒钟。你真的想强迫用户等这么长时间才能看到页面的内容吗?