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"。
我将教程中的各种片段拼接在一起,以使用 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"。