Garret Kaye
Garret Kaye

Reputation: 2562

how to pass php generated image into html meta tag

Im trying to pass a merged image from php into a html meta tag (for a twitter summary card if you're wondering) but the data of the image is not being passed. When I run this code I get no errors from html or 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.'">

I'm not 100% sure that you can even pass a raw image at all into the content attribute of the meta tag but I'm thinking there should be a way to do this and I'm also thinking that this is what is causing the image to not show. I'm open to an html/css solution if a php solution is not possible. I've been stuck on this for a while so any suggestions and input you might have will be mighty appreciated. Thank You!

EDIT

I should add that this is a php script so the html is being created like this:

$html = '

<html>
<head>

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

</head>
<body>

</body>
</html>

';

echo $html;

Upvotes: 9

Views: 2693

Answers (3)

Sam Battat
Sam Battat

Reputation: 5745

You could use 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);

then use that string in the tag

<meta name="twitter:image" content="data:image/png;base64,<?php echo $img; ?>">

Upvotes: 6

Reeno
Reeno

Reputation: 5705

This won't work. 'imagecopymerge' returns an image resource, which has to be sent to the browser as an image or saved to the server hard disk a file with 'imagejpeg'. If it's directly sent to the browser (first option), this PHP file then has to be referenced in the HTML.

So basically, in your HTML, reference to a PHP file, with your postid parameter:

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

In the file image.php create your file and output it (you should also add some validation code for $_GET['postid'] here):

<?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);
?>

Upvotes: 11

Martin
Martin

Reputation: 16433

If you want to place the contents of a PHP variable into some HTML you need to echo the variable into the HTML attribute by placing it inside a PHP code block.

Something like this should achieve the aim:

<meta name="twitter:image" content="<?php echo $dest; ?>">

Upvotes: 1

Related Questions