This program can generate PNG images of the current time without using the GD Library, which is of great reference value. teaman: This program does not use the GD library to generate PNG images of the current time. it is very helpful for you. teaman sorting
> 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) & 0 xffffff; $ c = $ crc_table [($ c ^ ord ($ chunk] [$ n]) & 0xff] ^ $ c8 ;}$ crc = $ c ^ $ z; $ chunk. = chr ($ crc> 24) & 255); $ chunk. = chr ($ crc> 1 6) & 255); $ chunk. = chr ($ crc> 8) & 255); $ chunk. = chr ($ crc & 255); // add the result to $ result. = $ chunk;} // Main program $ sx = 80; $ sy = 21; $ pixels = ""; // fill 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, 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, 0, 26, 13); set_4pixel (0, 0, 0, 52, 7); set_4pixel (0, 0, 0, 0, 52, 13); // Create a cyclic verification code table $ z =-306674912; // = 0xedb88320 for ($ n = 0; $ n <256; $ n ++) {$ c = $ n; for ($ k = 0; $ k <8; $ k ++) {$ c2 = ($ c> 1) & 0x7fffff; 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) & amp; 255, ($ sx> 8) & amp; 255, $ sx & amp; 255, ($ sy> & gt; 24) & amp; 255, ($ sy> & gt; 16) & amp; 255, ($ sy> 8) & 255, $ sy & 255, 8, 2, 0, 0, 0); add_chunk ("IHDR"); // do not dare to translate in disorder below, please refer to // 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, 32 k 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 compre Ssion // 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"); // print the image echo ($ result);?> // How to call it is actually very simple. Save the above as Timeimg. php // and then create a new page as follows: Test
// Call the php file through image connection