1

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

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);
  };  
?>
4

3 回答 3

2

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

您应该:

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

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

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

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

于 2013-07-22T14:18:38.257 回答
0

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

于 2013-07-22T14:15:11.070 回答
0

从什么时候开始标题停止脚本?

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

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

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

于 2013-07-22T14:16:31.703 回答