调整大小后显示图像

3

我正在尝试使用以下函数调整图像大小:

function resize_image($file, $w, $h, $crop=FALSE) {
    list($width, $height) = getimagesize($file);
    $r = $width / $height;
    if ($crop) {
        if ($width > $height) {
            $width = ceil($width-($width*abs($r-$w/$h)));
        } else {
            $height = ceil($height-($height*abs($r-$w/$h)));
        }
        $newwidth = $w;
        $newheight = $h;
    } else {
        if ($w/$h > $r) {
            $newwidth = $h*$r;
            $newheight = $h;
        } else {
            $newheight = $w/$r;
            $newwidth = $w;
        }
    }
    $src = imagecreatefromjpeg($file);
    $dst = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

    return $dst;
}

创建函数后,我尝试使用以下代码显示调整大小后的图像,但它无法正常工作:
<?php

    $img = resize_image('../images/avatar/demo.jpg', 120, 120);

    var_dump($img); //The result is: resource(6, gd)
?>
    <img src="<?php echo $img;?>"/>

提示:包含该函数没有问题。


你用来存储图像的指令在哪里,或者你想要在运行时调整它的大小?你只是尝试打印一个图像资源标识符,期望得到一张图片,这是行不通的... 你可能需要一个文件夹来存储临时图像,调整它们的大小并在完成其功能后删除它们。 - Asur
1个回答

4
您不能直接以那种方式输出图像。您可以选择以下两种方法之一:
  1. 将图像保存到磁盘并在图像标签中输入URL。
  2. 缓冲原始数据,对其进行base64编码,并将其作为数据URI输出(如果您正在处理大型图像,则不建议使用此方法)。
方法1:
<?php
$img = resize_image('../images/avatar/demo.jpg', 120, 120);
imagejpeg($img, '../images/avatar/demo-resized.jpg');
?>
<img src="<?= 'www.example.com/images/avatar/demo-resized.jpg' ?>"/>

方法2:

<?php
$img = resize_image('../images/avatar/demo.jpg', 120, 120);
ob_start();
imagejpeg($img);
$output = base64_encode(ob_get_contents());
ob_end_clean();
?>
<img src="data:image/jpeg;base64,<?= $output; ?>"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接