无法显示图片,因为它包含错误(需要帮助!)

时间:2015-02-05 08:21:04

标签: php

当我尝试使用此代码时,我收到此错误:"图像无法显示,因为它包含错误"而且我不知道如何解决它。

header('Content-type: image/jpeg');
$email= 'example@example.com';
$email_length=strlen($email);
$font_size= 4;
$image_height= imagefontheight($font_size);
$image_width = imagefontwidth($font_size)*$email_length;
$image=imagecreate($image_width, $image_height);
imagecolorallocate($image,255,255,255);
$font_color= imagecolorallocate($image,0,0,0);
imagestring($image,$font_size, 0, 0, $email, $font_color);
imagejpeg($image);

2 个答案:

答案 0 :(得分:1)

消息"图像无法显示,因为它包含错误" 由浏览器生成。从服务器收到的响应标题表示响应正文应解释为JPEG图像(image/jpeg)。

JPEG文件的格式(与大多数二进制格式一样)以包含"签名"的标题开头。 (用于将文件标识为JPEG的字节序列),图像信息(宽度,高度),内容长度等。

如果脚本在执行期间产生警告或通知,则在图像文件的字节之前浏览器接收到这个额外的内容(它们是由最后一行代码生成的),浏览器无法找到JPEG签名并报告上述错误(并且是正确的)。

如何调试

删除/评论header()行或暂时将其替换为:

header('Content-type: text/plain');

此更改将停止告知浏览器将内容解释为图像;它将按原样显示,您可以检查它并查看PHP警告和通知(如果有)。

找到并解决问题之后,代码不再生成错误消息,将原来的header行放回去,它应该可以正常工作。

其他可能的原因:BOM

如果上面说明的更改未显示代码产生的任何消息,并且浏览器仍然抱怨收到的内容中的错误,那么请确保PHP文件未保存为带有BOM的UTF-8。 UTF-8很好,BOM就是问题。

BOM(字节顺序标记)是一个字节序列,它写在文件的最开头,让读取它的程序知道字符在该文件中的编码方式。它对于UTF-16编码至关重要,但它对UTF-8完全没用。但是,许多文本编辑器将其放在文件中,其中一些可以跳过它。

BOM编码一个特殊的空白字符,该字符不可见且不占用空间。通过目视检查PHP脚本或其输出无法检测到它。此外,没有办法从PHP代码处理它,因为如果存在,它将存储在开始标记<?php之前的PHP文件中,并且PHP解释器将其与除了之外的任何其他内容一起发送到浏览器。 PHP打开和关闭标签。

如何解决

检查代码编辑器的设置并取消选中告诉它使用BOM保存文件的选项(或选中说明&#34;跳过BOM&#34;)。

如果没有关于BOM的设置,请将编码更改为ISO-8859-1(也称为ISO-latin1)。此编码不使用BOM,对于所有ASCII字符(数字,小写和大写字母,没有重音符号或变音符号,标点符号,括号,数学运算符,直引号和编程使用的其他特殊字符),它与UTF-8相同语言)。

更改编码不会影响以任何方式暴露问题的代码。

答案 1 :(得分:0)

确保已安装库GD

if (extension_loaded('gd') && function_exists('gd_info')) {
    echo "PHP GD library is installed on your web server";
}
else {
    echo "PHP GD library is NOT installed on your web server";
}