Reputation: 2562
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
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
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
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