PHP GD库合成图片 发表于 2017-01-07 | 分类于 PHP | 浏览 次 引入phpqrcode,并结合php提供的类库gd进行图片合成 安装GD库 终端内运行php -m,可以查看到是否安装gd库 安装gd库 apt-get install php5-gd #ubuntu yum install php5-gd #centos 代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106<?php/** * @desc: generate qrcode */define("QRCODE_PATH", dirname(__FILE__));include 'phpqrcode/qrlib.php';//download zip file//download($zipName);generate_qr('123456');function generate_qr($str){ $font = QRCODE_PATH.'/hwxh.ttf'; $num = str_pad($str, '6', '0', STR_PAD_LEFT); $txt = '收 银 台 : ' .trim(preg_replace('/(\d)/', '$1 ', $num)); $url = 'https://example.com/' . $num; //二维码内容 $qrcode = "/tmp/{$num}_qr.png"; $level = 'L';//容错级别 $size = 10;//生成图片大小 QRcode::png($url, $qrcode, $level, $size, 2); //二维码宽/高度 $qrcode = imagecreatefrompng($qrcode); $qrcode_w = imagesx($qrcode); $qrcode_h = imagesy($qrcode); $bg_w = 768; // 背景图片宽度 $bg_h = 800; // 背景图片高度 $bg_img = imagecreatetruecolor($bg_w, $bg_h); $white = imagecolorallocate($bg_img, 255, 255, 255); imagefill($bg_img, 0, 0, $white); imagecopyresampled($bg_img, $qrcode, 15, -10, 0, 0, 740, 740, $qrcode_w, $qrcode_h); $black = imagecolorallocate($bg_img, 0, 0, 0); $fontsize = 28; $fontbox = imagettfbbox($fontsize, 0, $font, $txt); imagettftext($bg_img, $fontsize, 0, ceil(($bg_w - $fontbox[2])/2), $bg_w + 5, $black, $font, $txt); $qr = "/tmp/qr_$num.png"; imagepng($bg_img, $qr); imagedestroy($qrcode); imagedestroy($bg_img); $fp = fopen($qr, 'rb', 0); /** * 修改图片分辨率 */ $base64= 'data:image/png;base64,'.base64_encode(fread($fp, filesize($qr))); $file = file_get_contents($base64); $filename = "$num.png"; //数据块长度为9 $len = pack("N", 9); //数据块类型标志为pHYs $sign = pack("A*", "pHYs"); //X方向和Y方向的分辨率均为300DPI(1像素/英寸=39.37像素/米),单位为米(0为未知,1为米) $data = pack("NNC", 300 * 39.37, 300 * 39.37, 0x01); //CRC检验码由数据块符号和数据域计算得到 $checksum = pack("N", crc32($sign . $data)); $phys = $len . $sign . $data . $checksum; $pos = strpos($file, "pHYs"); if ($pos > 0) { //修改pHYs数据块 $file = substr_replace($file, $phys, $pos - 4, 21); } else { //IHDR结束位置(PNG头固定长度为8,IHDR固定长度为25) $pos = 33; //将pHYs数据块插入到IHDR之后 $file = substr_replace($file, $phys, $pos, 0); } file_put_contents(QRCODE_PATH."/images/$filename", $file); //header("Content-type: image/png"); //header('Content-Disposition: attachment; filename="' . $filename . '"'); unlink("/tmp/{$num}_qr.png"); unlink("/tmp/qr_$num.png"); // echo $file;}function download($zipName){ //实例化zipArchive类 $zip = new zipArchive(); if(!$zip->open($zipName, ZIPARCHIVE::CREATE)){ exit('不能下载'); } //打开的方式来进行创建 若有则打开 若没有则进行创建 //循环将要下载的文件路径添加到压缩包 $files = glob(QRCODE_PATH.'/images/*'); foreach ($files as $file) { if(file_exists($file)){ $zip->addFile($file, basename($file)); } } //关闭压缩包 $zip->close();// //实现文件的下载// header('Content-Type:Application/zip');// header('Content-Disposition:attachment; filename="' . basename($zipName) . '"');// header('Content-Length:' . filesize($zipName));// readfile($zipName);// //删除生成的压缩文件// unlink($zipName);} 运行结果: 参考资料phpqrcode字体下载 轻轻的我走了,正如我轻轻的来 赏 微信打赏 支付宝打赏 本文作者: Jason hu 本文链接: http://jasonhzy.github.io/2017/01/07/php-generate-qr/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!