使用php动态调整图像大小

时间:2013-07-22 14:12:08

标签: php image-resizing

我整天搜索了一个函数来动态调整服务器上的图片大小,而不保存它们。代码工作,它显示全尺寸图像,现在我想让它们变小。 这是功能:

function resize_image($file, $width, $height) {
    if (file_exists($file)){
        $image = imagecreatefromjpeg($file);
        list($orig_width, $orig_height) = getimagesize($file);
        $ratio = $orig_width / $orig_height;
        if ($ratio < 1) {
            $width = $height * $ratio;
        } else {
            $height = $width / $ratio;
        }
        $new_image = imagecreatetruecolor($width, $height);
        imagecopyresized($new_image, $image,
        0, 0, 0, 0,
        $width, $height,
        $orig_width, $orig_height);
        // header('Content-type: image/jpeg');
        imagejpeg($new_image, NULL, 80);
    }
}

根据我今天搜索的内容,我需要为浏览器设置标题(Content-type: image/jpeg')以将输出识别为图像,但如果我这样做则会停止脚本。

这是使用它的页面:

<? include('resize.php');
 $chapter='test';
 $query=$db->prepare("SELECT * FROM `test_db` WHERE `test_db`.`Chapter` LIKE :? ORDER BY `id` ASC LIMIT 0, 6");
    $query->bindValue(1, $chapter, PDO::PARAM_STR);
    $query->execute();
    $rows= $query->fetchAll(PDO::FETCH_ASSOC);  
foreach ($rows as $row){       
    echo "<li><h2>".$row['Name']."</h2></li>" ;
    resize_image("_images/".$row['img_number'].".jpg", 300, 190);
  };  
?>

3 个答案:

答案 0 :(得分:2)

您无法在同一脚本中将html和图像输出到浏览器。

你应该:

  • 使用单独的脚本输出图像并从html调用(简单示例):

    <img src="your_script.php?id=XX&size_x=XX&size_y=XX">

  • 将图像保存到文件并从html链接到该文件。

您还可以将图像编码为base64字符串并在图像标记中使用它,但除非您在谈论简单按钮,否则会导致非常大的html文件。

答案 1 :(得分:0)

不要将结束标记放在PHP中。它将在结束标记之后输出空格,这将改变结果。

答案 2 :(得分:0)

什么时候标题会停止脚本?

是的,保存调整大小的文件的原因是(1)你可能会再次需要它们,(2)内容类型使它们成为一个图像而不是文本。如果你想调整那些“内联”的大小,你需要两种内容类型,我想这样做不会那么好......

您可以做的是调整大小并保存文件,提供服务并删除它。像临时图像文件。据我所知,不存在更直接的方式。但如果我错了,请在评论中指出我。我喜欢学习新东西;)

编辑:好的,除了脚本只处理图像大小调整时。现在只想着那个。对不起:)