Я соединил воедино различные части из учебников, чтобы использовать 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;
без эффекта.
Кто-нибудь может сказать мне, почему моя функция не работает, как ожидалось?
Проблема в том, что когда вы используете 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» в теге источника изображения.
Других решений пока нет …