动态降低图像质量并显示低质量版本

时间:2013-04-07 19:40:01

标签: php jquery wordpress

我有一个使用Wordpress的竞赛网站,允许用户提交图像。有700多个条目,每个条目最多6个图像,每个图像的最大文件大小为3mb。

我已将所有条目列为帖子,然后在每个帖子上显示图像。

使用the_field('image1');the_field('image2');the_field('image3');等显示每张图片。

我遇到的问题是页面然后尝试以3mb的速度加载6个图像。有没有办法在运行中优化图像并以50%的质量显示它?

4 个答案:

答案 0 :(得分:3)

您可以在从数据库(或文件)中提取图片后立即调整图片大小,而无需创建其他临时文件。大概你有一个从数据库中获取图像的URL。

$pdo = new PDO("somewhere");
$sql = "SELECT image_data FROM pictures WHERE id=1";

$stmt = $pdo->query( $sql );
$obj = $stmt->fetch(PDO::FETCH_OBJ);

$img = imagecreatefromstring($obj->image_data);

header('Content-Type: image/jpeg');
imagejpeg($img, NULL, 50);

imagedestroy($img);

如果将NULL作为文件名传递给imagejpeg,它会将jpeg写入标准输出。第三个参数是质量等级,在这种情况下为50%。

答案 1 :(得分:0)

上传图像时,可以保存2张图像。 1.原始图像 2.图像的低分辨率副本

因此,当用户查看页面时,最初会显示低分辨率图像,而原始图像将在后台下载。

您可以轻松找到一些现成的代码来通过PHP调整图像大小。像这个。 http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/

答案 2 :(得分:0)

$file =  $_GET['file'];//URL with img parameter http://localhost/fk/test.php?file=1.jpeg
$quality = 40; //Change What quality you needed
$location = "images/".$file;
$image = imagecreatefromjpeg($file);
imagejpeg($image, $location, $quality) ;
header('Content-Type: image/jpeg');
    header('Content-Length: ' . filesize($location));
    header('Content-Disposition: inline; filename="'.$file.'"');
    echo file_get_contents($location);

答案 3 :(得分:-1)

无法动态调整图像大小。有这种拒绝服务自攻的CPU扼流圈只有直接的方法。

图片必须在上传后立即调整为合理的尺寸和质量。世界上的每个网站都是这样做的。