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

0

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

без эффекта.

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

  • 2
    Ваша функция генерирует необработанные данные изображения, но атрибут src <img> ожидает URL.
  • 0
    Я пытался использовать base64_decode () для необработанных данных, после чего возвращал результат imagecreatefromstring ($ img), но все тот же ... любые указатели?
Показать ещё 1 комментарий
Теги:
image

1 ответ

1
Лучший ответ

Проблема в том, что при использовании 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" в теге источника изображения.

  • 0
    Работал отлично ... спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню