php gd2图片保存,PHP使用GD2库生成的图像无法输出的解决方法

前言

有时候我们可能随意的使用php跟GD库来创建一张图片,可能是用于展示验证码之类的。

官方代码如下:Note: 此函数需要 GD 2.0.1 或更高版本(推荐 2.0.28 及更高版本)。<?php

header ('Content-Type: image/png');

$im = @imagecreatetruecolor(120, 20)

or die('Cannot Initialize new GD image stream');

$text_color = imagecolorallocate($im, 233, 14, 91);

imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

imagepng($im);

imagedestroy($im);

?>

以上例程的输出类似于:

21009b70229598c6a80eef8b45bf282b-imagecreatetruecolor.png

可能会遇到的坑事情总是往往不如人意,在大大小小的项目,零零碎碎的代码中,总会遇到一些问题,造成用GD2库画图,图像无法显示等等。

bug1:未开启GD模块

找到你PHP的配置文件:php.ini,寻到这里行;extension=php_gd2.dll

如果这行前面有分号,记得去掉,并重启相关服务。

bug2:执行文件格式有问题

你的代码很可能是使用了像editpuls或者notepad++这样的文本编辑器编辑的,那么他们的默认编码格式就是有BOM的utf-8。

UTF-8 BOM又叫UTF-8 签名,其实UTF-8的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。一般我用UTF-8无BOM格式,所以你需要将代码的编码格式改成无BOM格式。

如何检验代码编码格式是否有带BOM呢?有一个简单的方法:$url = 'http://xxx/xxx'

$s = file_get_contents($url);

echo bin2hex($s);

//输出结果:efbbbf89504e470d0a1a0a0000000d49484452000000c6000000c60103000000b3556d1e0000000......

如果结果前面是efbbbf开头,就说明代码带有BOM 头。

这时就采用各种编辑器或者小工具,转换一下代码编码为不带BOM的就可以了。

bug3:受缓存影响

如果尝试多种方法无果,这时可以考虑使用ob_clean()了,清除一下缓存。

ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。例如:public function create()

{

ob_clean();

$a = new verify();

session::set('captcha', strtolower($a->create(4, 15)));

view::assign("captcha", $a);

view::display("captcha");

exit(0);

}

希望以上能帮助大家填些坑~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值