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

时间:2010-01-18 08:58:46   来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:   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);    ...
  正文:

该程序是不用GD库可以生成当前时间的PNG格式图象,给人大开眼界,很有参考价值. teaman整理
  
  <?PHP
  
   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);
来源:http://www.002pc.com/master/College/Programming/PHP/12007.html

收藏到:

关于《不用GD库生成当前时间的PNG格式图象的程序》文章的评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

随机文章

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by rand() limit 10

顶出来的热门

    SQL Error: select * from ***_ecms_article where classid='86' and checked=1 order by diggtop desc,id desc limit 10
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td