我正在尝试将图像输出到浏览器,然后在同一页面上输出HTML(与图像没有直接关系)。这可能吗?我有一点时间搞清楚了。这是我一直在搞乱的代码:
<?php
function LoadJpeg($imgname){
/* Attempt to open */
$im = @imagecreatefromjpeg($imgname);
/* See if it failed */
if(!$im){
/* Create a black image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
return $im;
}
header('Content-Type: image/jpeg');
$img = LoadJpeg('images/Ball.jpg');
imagejpeg($img);
imagedestroy($img);
//trying to start my text here
header('Content-Type text/html; charset=utf-8');
echo "<br /><h2>ross</h2>";
?>
在我的代码底部附近是我尝试在我的html中添加的地方。当我运行它时,我只获取图像,然后没有文本。如果我尝试在函数之前将其移动到顶部,在打开php标记之后,文本正常工作,然后我收到错误:
警告:无法修改标题信息 - 已在第28行的/Applications/MAMP/htdocs/newimage.php中发送的标题(在/Applications/MAMP/htdocs/newimage.php:4处开始输出)
非常感谢任何帮助,谢谢。
答案 0 :(得分:9)
停下来思考一下。您通常如何在HTML文件中嵌入图像? 您创建两个文件:text.html和image.jpg。同样,您将创建两个 scrips,一个输出HTML,另一个生成图像。 HTML看起来像:
<img src="generateimage.php" alt="generated image"/>
<br/>
<h2>ross</h2>
generateimage.php
脚本仅生成图像。
让我们以一个允许用户创建数字圣诞卡的形式为例:他可以选择图像并在其下面写下个人笔记。
form.html:
<html><body>
<form action="view_card.php" method="post">
Select an image:
<select name="imgname">
<option value="tree">Picture of Christmas tree</option>
<option value="santa">Picture of Santa</option>
</select><br/>
Write a message:
<textarea name="message"></textarea>
<br/>
<input type="submit" value="View Christmas card"/>
</form>
</body></html>
view_card.php:
<html><body>
Here is your Christmas card:
<hr/>
<!-- sending the requested image to the generateimage.php script
as a GET parameter -->
<img src="generateimage.php?imgname=<?php echo(urlencode($_POST['imgname'])); ?>"/>
<?php echo(htmlspecialchars($_POST['message'])); ?>
</body></html>
generateimage.php:
<?php
/* Stop evil hackers from accessing files they are not supposed to */
$allowed_files = array('tree' => 'tree.jpg', 'santa' => 'santa.jpg');
if( !isset($allowed_files[$_GET['imgname']]) {
exit; // Thank you for playing...
}
/* Attempt to open */
$im = @imagecreatefromjpeg($allowed_files[$_GET['imgname']]);
/* See if it failed */
if(!$im){
/* Create a black image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
header('Content-Type: image/jpeg');
imagejpeg($im);
imagedestroy($im);
?>
答案 1 :(得分:8)
请参阅以下问题与解答:Base64 Encoding Image。
您必须可以使用base64_encode()
对您的图片进行编码,然后在<img>
标记内输出:
<img src="data:image/x-icon;base64,<?php echo base64_encode($img); ?>"></img>
(有关证明,请参阅this jsfiddle。)
您可以在生成HTML的脚本之外生成图像。在这种情况下,您需要在此处生成HTML并将src
标记的<img>
属性设置为生成图像的脚本的位置。有关此解决方案的详细解答,请参阅@ Rodin的答案。
有效吗?你还需要帮助吗?
答案 2 :(得分:1)
输出发送到浏览器后,您无法设置标题。而是将所有内容作为text / html发送,并将原始图像数据插入到img标记
中<?php
function LoadJpeg($imgname)
{
/* Attempt to open */
$im = @imagecreatefromjpeg($imgname);
/* See if it failed */
if(!$im)
{
/* Create a black image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
// Changed the following line to return the output
// of imagejpeg() instead of the image object
return imagejpeg($im);
}
$img = LoadJpeg('images/Ball.jpg');
//trying to start my text here
header('Content-Type text/html; charset=utf-8');
// img tag with image raw data set as source
echo '<img src="data:image/jpeg;base64,'.base64_encode($img).'" alt="photo">';
echo "<br /><h2>ross</h2>";
?>
答案 3 :(得分:0)
仅将您的图像创建代码存储在自己的php脚本中。然后你在HTML中调用脚本就好像它是带有img标签的常规图像一样:
<img src="jpegscript.php" alt="image"/>