欢迎您来到懒之才-站长的分享平台!   学会偷懒,并懒出境界是提高工作效率最有效的方法!
首页 > 经验分享 > PHP > PHP生成图像格式文件,不使用GD库

PHP生成图像格式文件,不使用GD库

2018-06-19 630 收藏 0 赞一个 0 真差劲 0 去评论

PHP不使用GD库生成图像,不相信么?看来自国外的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);
$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;
}
$result = pack("c*", 137,80,78,71,13,10,26,10);
$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");
$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++];
}
}
$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");
$data = "";
add_chunk("IEND");
//输出图象
echo($result);

不用调用?下面给你调用实例,其实很简单,你需要将上面的代码保存为一个PHP后缀的文件,就叫做creimg.php吧。在你需要显示图片的img src地方变成下面的样子即可:

<img src="creimg.php">

方法教给你了,赶快试试吧,个人觉得非常适合虚拟主机的用户使用,因为虚机有时候无权限修改PHP.INI,若遇到没打开GD库的话,是没办法使用这个库吧,通过本方法可以不使用GD库生成图像。

一、推荐使用迅雷或快车等多线程下载软件下载本站资源。

二、未登录会员无法下载,登录后可获得更多便利功能,若未注册,请先注册。

三、如果服务器暂不能下载请稍后重试!总是不能下载,请点我报错 ,谢谢合作!

四、本站大部分资源是网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果将由您自己承担!本站将不对任何资源负法律责任.如果您发现本站有部分资源侵害了您的权益,请速与我们联系,我们将尽快处理.

五、如有其他问题,请加网站设计交流群(点击这里查看交流群 )进行交流。

六、如需转载本站资源,请注明转载来自并附带链接

七、本站部分资源为加密压缩文件,统一解压密码为:www.aizhanzhe.com

大家评论