php不用GD库生成当前时间的PNG格式图象的程序

更新时间:2008年09月28日 14:40:24   作者:

该程序是不用GD库可以生成当前时间的PNG格式图象,给人大开眼界,很有参考价值. teaman整理

function set_4pixel($r, $g, $b, $x, $y)

{

global $sx, $sy, $pixels;

$ofs = 3 * ($sx * $y + $x);

$pixels[$ofs] = chr($r);

$pixels[$ofs + 1] = chr($g);

$pixels[$ofs + 2] = chr($b);

$pixels[$ofs + 3] = chr($r);

$pixels[$ofs + 4] = chr($g);

$pixels[$ofs + 5] = chr($b);

$ofs += 3 * $sx;

$pixels[$ofs] = chr($r);

$pixels[$ofs + 1] = chr($g);

$pixels[$ofs + 2] = chr($b);

$pixels[$ofs + 3] = chr($r);

$pixels[$ofs + 4] = chr($g);

$pixels[$ofs + 5] = chr($b);

}

//生成数字图象的函数

function draw2digits($x, $y, $number)

{

draw_digit($x, $y, (int) ($number / 10));

draw_digit($x + 11, $y, $number % 10);

}

function draw_digit($x, $y, $digit)

{

global $sx, $sy, $pixels, $digits, $lines;

$digit = $digits[$digit];

$m = 8;

for ($b = 1, $i = 0; $i < 7; $i++, $b *= 2) {

if (($b & $digit) == $b) {

$j = $i * 4;

$x0 = $lines[$j] * $m + $x;

$y0 = $lines[$j + 1] * $m + $y;

$x1 = $lines[$j + 2] * $m + $x;

$y1 = $lines[$j + 3] * $m + $y;

if ($x0 == $x1) {

$ofs = 3 * ($sx * $y0 + $x0);

for ($h = $y0; $h <= $y1; $h++, $ofs += 3 * $sx) {

$pixels[$ofs] = chr(0);

$pixels[$ofs + 1] = chr(0);

$pixels[$ofs + 2] = chr(0);

}

} else {

$ofs = 3 * ($sx * $y0 + $x0);

for ($w = $x0; $w <= $x1; $w++) {

$pixels[$ofs++] = chr(0);

$pixels[$ofs++] = chr(0);

$pixels[$ofs++] = chr(0);

}

}

}

}

}

//将文字加入到图象中

function add_chunk($type)

{

global $result, $data, $chunk, $crc_table;

// chunk :为层

// length: 4 字节: 用来计算 chunk

// chunk type: 4 字节

// chunk data: length bytes

// CRC: 4 字节: 循环冗余码校验

// copy data and create CRC checksum

$len = strlen($data);

$chunk = pack("c*", ($len >> 24) & 255,

($len >> 16) & 255,

($len >> 8) & 255,

$len & 255);

$chunk .= $type;

$chunk .= $data;

// calculate a CRC checksum with the bytes chunk[4..len-1]

$z = 16777215;

$z |= 255 << 24;

$c = $z;

for ($n = 4; $n < strlen($chunk); $n++) {

$c8 = ($c >> 8) & 0xffffff;

$c = $crc_table[($c ^ ord($chunk][$n])) & 0xff] ^ $c8;

}

$crc = $c ^ $z;

$chunk .= chr(($crc >> 24) & 255);

$chunk .= chr(($crc >> 16) & 255);

$chunk .= chr(($crc >> 8) & 255);

$chunk .= chr($crc & 255);

// 将结果加到$result中

$result .= $chunk;

}

//主程序

$sx = 80;

$sy = 21;

$pixels = "";

// 填充

for ($h = 0; $h < $sy; $h++) {

for ($w = 0; $w < $sx; $w++) {

$r = 100 / $sx * $w + 155;

$g = 100 / $sy * $h + 155;

$b = 255 - (100 / ($sx + $sy) * ($w + $h));

$pixels .= chr($r);

$pixels .= chr($g);

$pixels .= chr($b);

}

}

$date = getdate();

$s = $date["seconds"];

$m = $date["minutes"];

$h = $date["hours"];

$digits = array(95, 5, 118, 117, 45, 121, 123, 69, 127, 125);

$lines = array(1, 1, 1, 2, 0, 1, 0, 2, 1, 0, 1, 1, 0, 0, 0, 1, 0, 2, 1, 2, 0, 1, 1, 1, 0, 0, 1, 0);

draw2digits(4, 2, $h);

draw2digits(30, 2, $m);

draw2digits(56, 2, $s);

set_4pixel(0, 0, 0, 26, 7);

set_4pixel(0, 0, 0, 26, 13);

set_4pixel(0, 0, 0, 52, 7);

set_4pixel(0, 0, 0, 52, 13);

// 创建循环冗余码校验表

$z = -306674912; // = 0xedb88320

for ($n = 0; $n < 256; $n++) {

$c = $n;

for ($k = 0; $k < 8; $k++) {

$c2 = ($c >> 1) & 0x7fffffff;

if ($c & 1) $c = $z ^ ($c2); else $c = $c2;

}

$crc_table[$n] = $c;

}

// PNG file signature

$result = pack("c*", 137,80,78,71,13,10,26,10);

// IHDR chunk data:

// width: 4 bytes

// height: 4 bytes

// bit depth: 1 byte (8 bits per RGB value)

// color type: 1 byte (2 = RGB)

// compression method: 1 byte (0 = deflate/inflate)

// filter method: 1 byte (0 = adaptive filtering)

// interlace method: 1 byte (0 = no interlace)

$data = pack("c*", ($sx >> 24) & 255,

($sx >> 16) & 255,

($sx >> 8) & 255,

$sx & 255,

($sy >> 24) & 255,

($sy >> 16) & 255,

($sy >> 8) & 255,

$sy & 255,

8,

2,

0,

0,

0);

add_chunk("IHDR");

// 以下不敢乱翻译,请自行参考

// scanline:

// filter byte: 0 = none

// RGB bytes for the line

// the scanline is compressed with "zlib", method 8 (RFC-1950):

// compression method/flags code: 1 byte ($78 = method 8, 32k window)

// additional flags/check bits: 1 byte ($01: FCHECK = 1, FDICT = 0, FLEVEL = 0)

// compressed data blocks: n bytes

// one block (RFC-1951):

// bit 0: BFINAL: 1 for the last block

// bit 1 and 2: BTYPE: 0 for no compression

// next 2 bytes: LEN (LSB first)

// next 2 bytes: one's complement of LEN

// LEN bytes uncompressed data

// check value: 4 bytes (Adler-32 checksum of the uncompressed data)

//

$len = ($sx * 3 + 1) * $sy;

$data = pack("c*", 0x78, 0x01,

1,

$len & 255,

($len >> 8) & 255,

255 - ($len & 255),

255 - (($len >> 8) & 255));

$start = strlen($data);

$i2 = 0;

for ($h = 0; $h < $sy; $h++) {

$data .= chr(0);

for ($w = 0; $w < $sx * 3; $w++) {

$data .= $pixels[$i2++];

}

}

// calculate a Adler32 checksum with the bytes data[start..len-1]

$s1 = 1;

$s2 = 0;

for ($n = $start; $n < strlen($data); $n++) {

$s1 = ($s1 + ord($data[$n])) % 65521;

$s2 = ($s2 + $s1) % 65521;

}

$adler = ($s2 << 16) | $s1;

$data .= chr(($adler >> 24) & 255);

$data .= chr(($adler >> 16) & 255);

$data .= chr(($adler >> 8) & 255);

$data .= chr($adler & 255);

add_chunk("IDAT");

// IEND: marks the end of the PNG-file

$data = "";

add_chunk("IEND");

// 列印图象

echo($result);

?>

//如何调用,其实很简单,将上面存为Timeimg.php

//然后新建一个页面如下:

test

//以图象连接方式调用PHP文件

相关文章

这篇文章主要给大家介绍了关于php unset对json_encode的影响的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-11-11

这篇文章主要介绍了PHP微信网页授权的配置文件操作,结合实例形式分析了php微信授权配置文件的相关功能、用法及操作注意事项,需要的朋友可以参考下2019-05-05

这篇文章主要为大家详细介绍了Content-Disposition使用方法和注意事项,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-09-09

这篇文章主要介绍了php下的原生ajax请求用法,结合实例形式分析了前台原生ajax请求与后台PHP响应相关操作技巧,需要的朋友可以参考下2020-02-02

本文主要介绍针对PHP5.4以下版本的json_encode不兼容JSON_UNESCAPED_UNICODE的处理,需要的朋友可以参考下。2016-05-05

这篇文章主要为大家详细介绍了php使用curl实现简单模拟提交表单功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-05-05

这篇文章主要介绍了PHP基于session.upload_progress 实现文件上传进度显示功能,结合实例形式分析了php5.4版本session.upload_progress特性实现文件上传进度显示的相关操作技巧,需要的朋友可以参考下2019-08-08

想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效,于是有了下面的方法2013-04-04

php循环检测目录是否存在并创建,需要的朋友可以参考下。2011-01-01

这篇文章主要介绍了PHP vsprintf()函数格式化字符串操作原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-07-07

最新评论

php table生成图片,php不用GD库生成当前时间的PNG格式图象的程序相关推荐

  1. Web前端技巧分享:教你用GD库生成验证码

    验证码相信大家都不会陌生,在网站登录的时候经常会遇到.那么你知道这个验证码是如何实现的吗?下面小千就为大家介绍一下这个GD库,还有一些常见的图片水印也是用GD实现的哦! GD库是什么? GD库是php ...

  2. php gd库 函数 建立gif,PHP_PHP GD库生成图像的几个函数总结,使用GD库中提供的函数动态绘 - phpStudy...

    PHP GD库生成图像的几个函数总结 使用GD库中提供的函数动态绘制完成图像以后,就需要输出到浏览器或者将图像保存起来.在PHP中,可以将动态绘制完成的画布,直接生成GIF.JPEG.PNG和WBMP ...

  3. php gd库 圆形头像,基于 GD 库生成圆形头像

    基于 GD 库生成圆形头像 laravel 友好的图片处理库 Intervention Image 可以绘制圆形(circle()), 但是好像并不能将即存的图片裁剪成圆形, 这里提供一个基于 GD ...

  4. 原生PHP 调用原生GD库 生成海报

    $config=['background'=>'海报背景图','image'=>[['src' => '图片地址1', 'left' => '距左边距', 'top' => ...

  5. php案例:用GD库生成单色图案

    作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 前言 什么是GD库? 怎么开启GD库? 代码 效果: 前言 什么是GD库? GD 库是 PHP 处理 ...

  6. PHP GD库生成图像的几个函数总结

    使用GD库中提供的函数动态绘制完成图像以后,就需要输出到浏览器或者将图像保存起来.在PHP中,可以将动态绘制完成的画布,直接生成GIF.JPEG.PNG和WBMP四种图像格式.可以通过调用下面四个函数 ...

  7. PHP生产一个验证码图片,PHP使用GD库生成验证码图片,实现图片验证

    本文记录从php 下载配置GD图片生成库 到使用该库生成验证码图片,网页上实现验证码. 使用技术: php使用GD库绘图 [php版本7.3] php session 缓存 实现最终效果: 一. 配置 ...

  8. 利用PHP GD库生成位图

    关于PHP在apache中的安装配置请参考 Apache 配置CGI脚本操作数据库 位图 位图图像(bitmap), 亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的.这些点可以进行不 ...

  9. PHP 使用GD库生成验证码 在图像上绘制汉字

    PHP 并不仅限于创建 HTML 输出, 它也可以创建和处理包括 GIF, PNG, JPEG, WBMP 以及 XPM 在内的多种格式的图像. 更加方便的是,PHP 可以直接将图像数据流输出到浏览器 ...

最新文章

  1. HDU-1459.非常可乐(BFS )
  2. 接口隔离原则最直白描述
  3. 网站快照更新不及时有什么好的解决办法吗?
  4. 属于服务器端运行的程序_生信分析云平台产品开发 - 5 生信分析pipeline服务器端运行...
  5. 非对称加密, 助记词, PIN, WIF
  6. 为什么json转化有斜杠_json中大量反斜杠问题
  7. mathpix公式利器使用心得
  8. 选项在哪_心理测试:4种高跟鞋,比较喜欢哪一种?测试出你对物的欣赏面
  9. EOS project 中 的一个 jsp 文件中 调用 javascript函数的问题
  10. 直角三角形的边角关系_三角形的边角关系巩固练习
  11. centos yum install 默认目录_Centos7如何更换yum仓库
  12. CentOS 7 下的LVM 实战
  13. OpenOffice java api UNO 教程
  14. 基于C++和AStar算法求解八数码问题的方案
  15. 基于激光刻划技术的石墨烯器件
  16. gatk过滤_快速入门GATK | Public Library of Bioinformatics
  17. MySql经典面试题(含表)
  18. 百度开源深度学习平台Paddle
  19. (入门)使用ab进行压力测试
  20. 黑苹果安装教程OC引导

热门文章

  1. 工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!
  2. 计算机网络层路由器工作原理——实现直连网段的通信
  3. 新浪博客发表博文不同步到新浪微博
  4. php 新浪财经rss,php动态生成xml格式的rss文件
  5. 微星主板cpu故障灯一直亮红灯解决办法
  6. 解决javax.naming.NameNotFoundException
  7. 怎么将照片变成漫画?照片一键变漫画方法分享
  8. 用NPOI操作EXCEL-NPOI计算公式-通过NPOI获得公式的返回值
  9. POI 解析Excel,以及引用公式、计算公式的正常解析
  10. 【BZOJ1033】[ZJOI2008]杀蚂蚁antbuster【模拟】