php 图像调整大小函数输出替换字符(很多次)

php image resize function outputs the replacement character (lots of times)

我将教程中的各种片段拼接在一起,以使用 php 调整图像大小。这是我的图片调整功能(注意:图片的相对路径绝对正确)。

function resizeImg() {
  $source_image = imagecreatefrompng('images/myImage.png');
  $source_imagex = imagesx($source_image);
  $source_imagey = imagesy($source_image);

  $dest_imagex = 16;
  $dest_imagey = 22;
  $dest_image = imagecreatetruecolor($dest_imagex, $dest_imagey);
  imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $dest_imagex, $dest_imagey, $source_imagex, $source_imagey);
  header("Content-Type: image/png");
  imagepng($dest_image,NULL,9);
}

函数调用如下:

<img src="<?php resizeImg(); ?>" alt=img">

但是,图片不仅输出为默认损坏的img图标,而且周围还有几十个替换字符�.

我想也许这个函数没有返回任何东西,所以我在函数的末尾插入:

return $dest_image;

没有效果。

谁能告诉我为什么我的功能没有按预期执行?

问题是当您使用 imagepng 和 headers 时,这仅适用于单独的脚本,例如:

<img src="theResizeScript.php"> 

这仅在不存在脚本的其他输出时才有效。

无论如何,您可以使用 ob_start 和 ob_end 来捕获这样的输出:

<img src="data:image/png;base64,<?php echo resizeImg(); ?>" alt="img"/>

<?php
function resizeImg() {

    $source_image = imagecreatefrompng('images/image.png');
    $source_imagex = imagesx($source_image);
    $source_imagey = imagesy($source_image);

    $dest_imagex = 16;
    $dest_imagey = 22;
    $dest_image = imagecreatetruecolor($dest_imagex, $dest_imagey);
    imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $dest_imagex, $dest_imagey, $source_imagex, $source_imagey);

    ob_start();
    imagepng($dest_image,NULL,9);
    $image_data = ob_get_contents();
    ob_end_clean();

    return base64_encode($image_data);
}

当然记得在你的图片来源标签中使用"data:image/png;base64"。