Функция изменения размера изображения php выводит символ замены (много раз)

Я соединил воедино различные части из учебников, чтобы использовать 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">

Тем не менее, изображение выводится не только как значок «разбитый» по умолчанию, но и окружено десятками заменяющих символов .

Я подумал, что, возможно, функция ничего не возвращает, поэтому я вставил в конец функции:

return $dest_image;

без эффекта.

Кто-нибудь может сказать мне, почему моя функция не работает, как ожидалось?

0

Решение

Проблема в том, что когда вы используете imagepng и заголовки, это работает только в отдельном скрипте, например:

<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» в теге источника изображения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]