как передать сгенерированное php изображение в метатег html

Я пытаюсь передать объединенное изображение из php в метатег html (для сводной карты Twitter, если вам интересно), но данные изображения не передаются. Когда я запускаю этот код, я не получаю ошибок от html или php:

PHP

$dest = imagecreatefromjpeg('http://www.website.com/Some-images/'.$postID.'.jpg'); 
$src = imagecreatefromjpeg('http://www.website.com/media/dog.jpg');



imagealphablending($dest, false);
imagesavealpha($dest, true);


imagecopymerge($dest, $src, 10, 9, 0, 0, 181, 180, 100); 

HTML

<meta name="twitter:image" content="'.$dest.'">

Я не уверен на 100%, что вы вообще можете передать необработанное изображение в атрибут содержимого метатега, но я думаю, что должен быть способ сделать это, и я также думаю, что это является причиной изображение не показывать. Я открыт для решения html/css, если решение php невозможно. Я застрял на этом некоторое время, поэтому любые ваши предложения и комментарии будут очень оценены. Спасибо!

ИЗМЕНИТЬ

Я должен добавить, что это php-скрипт, поэтому html создается следующим образом:

$html = '

<html>
<head>

<meta name="twitter:image" content="'.$dest.'">

</head>
<body>

</body>
</html>

';

echo $html;

person Garret Kaye    schedule 28.08.2016    source источник
comment
Если вы поместите var_dump($dest); в свой код, увидите ли вы значение $dest или вообще ничего?   -  person Martin    schedule 28.08.2016
comment
@MartinParkin да, я получаю вывод: ресурс (3) типа (gd)   -  person Garret Kaye    schedule 28.08.2016
comment
Я думаю, ваша проблема в том, что вы загружаете ресурс на веб-страницу, но на самом деле вы никогда его не отображаете (т.е. не имеете тега <img>).   -  person Kal Zekdor    schedule 07.09.2016
comment
Это не сработает. 'imagecopymerge' возвращает данные изображения, которые должны быть сохранены в файл с 'imagejpg', затем этот файл должен быть указан в HTML. Альтернатива: вы ссылаетесь на файл PHP в HTML и выводите файл без сохранения (также с 'imagejpg', но без второго параметра).   -  person Reeno    schedule 07.09.2016
comment
Ссылка на карточки Twitter для тех, кто не знаком: dev.twitter.com/cards/markup Похоже, вам нужно разбить это на два бита: одну html-страницу со ссылкой на URL-адрес изображения и один php-скрипт, который напрямую выводит изображение (много вопросов о том, как это сделать). Итак, в основном, что сказал @Reeno.   -  person Kal Zekdor    schedule 07.09.2016


Ответы (3)


Это не сработает. 'imagecopymerge' возвращает ресурс изображения, который необходимо отправить в браузер как изображение или сохранить на сервере на жесткий диск файл с 'imagejpeg'. Если он напрямую отправляется в браузер (первый вариант), этот файл PHP должен быть указан в HTML.

Итак, в вашем HTML ссылка на файл PHP с вашим параметром postid:

<meta name="twitter:image" content="image.php?postid='.$postID.'">

В файле image.php создайте свой файл и выведите его (вы также должны добавить код проверки для $_GET['postid'] здесь):

<?php
$dest = imagecreatefromjpeg('http://www.website.com/Some-images/'.$_GET['postid'].'.jpg'); 
$src = imagecreatefromjpeg('http://www.website.com/media/dog.jpg');

imagealphablending($dest, false);
imagesavealpha($dest, true);

imagecopymerge($dest, $src, 10, 9, 0, 0, 181, 180, 100); 

header('Content-Type: image/jpg');
imagejpeg($dest);
?>
person Reeno    schedule 06.09.2016
comment
Огромное спасибо за это. Хотел бы я дать вам больше очков, но, как вы видите, у меня их немного. Этот метод отлично работает! - person Garret Kaye; 07.09.2016

Вы можете использовать base64

$dest = imagecreatefromjpeg('http://www.website.com/Some-images/'.$postID.'.jpg'); 
$src = imagecreatefromjpeg('http://www.website.com/media/dog.jpg');

imagealphablending($dest, false);
imagesavealpha($dest, true);

imagecopymerge($dest, $src, 10, 9, 0, 0, 181, 180, 100); 

$img = base64_encode($dest);

затем используйте эту строку в теге

<meta name="twitter:image" content="data:image/png;base64,<?php echo $img; ?>">
person Sam Battat    schedule 06.09.2016
comment
По какой-то причине я не могу заставить твиттер-карту работать с кодировкой base64, но все равно спасибо! - person Garret Kaye; 07.09.2016

Если вы хотите поместить содержимое переменной PHP в некоторый HTML, вам нужно echo переменную в атрибут HTML, поместив ее в блок кода PHP.

Что-то вроде этого должно достичь цели:

<meta name="twitter:image" content="<?php echo $dest; ?>">
person Martin    schedule 28.08.2016
comment
Спасибо за предложение, но я попробовал ваше решение и все еще не играл в кости :( Я также отредактировал свой вопрос, чтобы дать больше информации - person Garret Kaye; 28.08.2016