记录学习与后端知识并分享学习代码过程(会飞的鱼Blog)

分享emlog海报代码 带食用方法

会飞的鱼 5 1804 2020年3月1日

本代码是从null扣下来的  有兴趣的可以去买他的主题https://www.qiuzq.cn/Theme/null.html

首先说说下面这两个文件

phpqrcode.php   qrcode.php   这两个文件必须要用到 具体什么用处你不需要知道 

下方有集成包  大家想加到其他主题的可以下载看研究

步骤1

在你的模版创建个php文件  例如我的haibao.php  创建好后你想放在那放在那 要记住路劲  需要用到

<div class="dialog_overlay"></div>
<div class="bigger-share">
    <div class="row-share">
        <div class="img-share">
            <img src="<?php echo poster_share($logid, Url::log($logid), img_url($thumbs,$logid,$log_content), $log_title, $date, $blogname, $bloginfo);?>" alt="<?php echo $log_title; ?>">
        <div class="action-haibao">
          <a href="<?php echo poster_share($logid, Url::log($logid), img_url($thumbs,$logid,$log_content), $log_title, $date, $blogname, $bloginfo);?>" download="<?php echo $log_title; ?>"><i class="fa fa-share-alt"></i></a>
          </div>
          </div>
           <div class="share-item">
            <h3>分享文本海报</h3>
            <div class="button">
                <a href="javascript:;" onclick="shareToWeibo('<?php echo Url::log($logid);?>','<?php echo $log_title;?>','<?php echo Url::log($logid);?>','')" title="分享到微博" class="btn btn-danger"><i class="fa fa-weibo"></i> 新浪微博</a>
            </div>
            <div class="button">
                    <a  href="javascript:;" onclick="shareToQzone('<?php echo Url::log($logid);?>','<?php echo $log_title;?>','<?php echo Url::log($logid);?>')" title="分享到QQ好友" class="btn btn-info"> <i class="fa fa-qq"></i> QQ好友</a>
            </div>
            <div class="button">      
                <a  href="javascript:;" onclick="shareToQzone('<?php echo Url::log($logid);?>','<?php echo $log_title;?>','<?php echo Url::log($logid);?>')" title="分享到QQ空间" class="btn btn-warning"> <i class="fa fa-qzone"></i> QQ空间</a>
            </div>
            <div class="button">
                <a href="<?php echo poster_share($logid, Url::log($logid), img_url($thumbs,$logid,$log_content), $log_title, $date, $blogname, $bloginfo);?>" download="<?php echo $log_title; ?>" class="btn btn-primary">
                    <i class="fa fa-cloud-download"></i> 下载海报</a>
            </div>        </div>
        <span class="share-close">
            <i class="fa fa-close"></i>
        </span>
        <div class="text-weixin">
                    <p>长按图片转发给朋友</p>
          </div>
    </div>
</div>

创建好后开始第二步骤

步骤2

打开你的文章页模版  一般都是echo_log.php  引入即可  引入方法:<?php include View::getView('inc/haibao');?>

fee模版使用方法  其他模版可参考

打开echo_log.php  放入加载点

<a class="share-haibao"><i class="fa fa-share-alt"></i> 生成海报</a>

打开heeder.php

载入

require_once View::getView('functions');

打开footer.php    放在任意地方 即可

<?php include View::getView('inc/haibao');?>

放入js   fee模版无需放入  fee模版无需放入  fee模版无需放入  请忽略这步

$('.share-haibao').click(function() {
            $('.bigger-share').addClass('haibao-on');
            $('.dialog_overlay').show();
            $('.dialog_overlay').click(function() {
            $('.bigger-share').removeClass('haibao-on');
            $('.dialog_overlay').hide();
            });

            });
    $('.share-close').click(function() {
            $('.bigger-share').removeClass('haibao-on');
            $('.dialog_overlay').hide();
            });

步骤3

新建一个functions.php  放到模版目录里

<?php 
/**
 * 局部函数库
 */
if(!defined('EMLOG_ROOT')) {exit('error!');}

//获取图片
function img_url($thumburl,$gid,$content,$open=false){
    if($thumburl){
        return $thumburl;
    }elseif(img_zw($content)){
        return img_zw($content);
    }elseif(img_fj($gid) && $open){
        return img_fj($gid);
    }else{
        return TEMPLATE_URL.'images/post.jpg';
    }
}

//抓取远程连接内容
function myCurl($url, $ip = '114.114.114.114'){
    $ch = curl_init();     // Curl 初始化  
    $timeout = 30;     // 超时时间:30s  
    $ua='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36';    // 伪造抓取 UA  
    curl_setopt($ch, CURLOPT_URL, $url);              // 设置 Curl 目标  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      // Curl 请求有返回的值  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);     // 设置抓取超时时间  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);        // 跟踪重定向  
    curl_setopt($ch, CURLOPT_ENCODING, "");    // 设置编码  
    curl_setopt($ch, CURLOPT_REFERER, $url);   // 伪造来源网址  
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:'.$ip, 'CLIENT-IP:'.$ip));  //伪造IP  
    curl_setopt($ch, CURLOPT_USERAGENT, $ua);   // 伪造ua   
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip'); // 取消gzip压缩  
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts  
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  
    $content = curl_exec($ch);   
    curl_close($ch);    // 结束 Curl  
    return $content;    // 函数返回内容  
}
//海报图生成
function createSharePng($gData,$fileName){
    //创建画布
    $width = 600;
    $height = 800;
    $im = imagecreatetruecolor($width, $height);

    //填充画布背景色
    $color = imagecolorallocate($im, 255, 255, 255);
    imagefill($im, 0, 0, $color);

    //字体文件
    $font_file_1 = EMLOG_ROOT."/content/templates/fee/static/hanyixizhongyuan.ttf";
    $font_file_2 = EMLOG_ROOT."/content/templates/fee/static/Montserrat-Regular.ttf";
    //设定字体的颜色

    $color_0 = ImageColorAllocate ($im, 0, 0, 0);
    $color_255 = ImageColorAllocate ($im, 255, 255, 255);
    $color_153 = imagecolorallocate($im, 153, 153, 153);
    $color_200 = imagecolorallocate($im, 200, 200, 200);

    //图片
    $source_path = myCurl($gData["pic"]);
    $head_img = imagecreatefromstring($source_path);
    $target_height = 480;
    $target_width = 600;
    $source_info = getimagesizefromstring($source_path);
    $source_width = $source_info[0];
    $source_height = $source_info[1];
    $source_ratio = $source_height / $source_width;
    $target_ratio = $target_height / $target_width;
    // 源图过高
    if ($source_ratio > $target_ratio){
        $cropped_width = $source_width;
        $cropped_height = $source_width * $target_ratio;
        $source_x = 0;
        $source_y = ($source_height - $cropped_height) / 2;
    }
    // 源图过宽
    elseif ($source_ratio < $target_ratio)
    {
        $cropped_width = $source_height / $target_ratio;
        $cropped_height = $source_height;
        $source_x = ($source_width - $cropped_width) / 2;
        $source_y = 0;
    }// 源图适中
    else{
        $cropped_width = $source_width;
        $cropped_height = $source_height;
        $source_x = 0;
        $source_y = 0;
    }
    // 裁剪
    $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
    imagecopy($cropped_image, $head_img, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
    imagecopyresampled($im, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
    imagedestroy($cropped_image);

    //时间
    $day = date('d', $gData["date"]);
    $day_width = imagettfbbox(70, 0, $font_file_2, $day);
    $day_width = abs($day_width[2] - $day_width[0]);
    $year = date('Y/m', $gData["date"]);
    $year_width = imagettfbbox(22, 0, $font_file_2, $year);
    $year_width = abs($year_width[2] - $year_width[0]);
    $day_left = ($year_width - $day_width) / 2;
    //  13
    imagettftext($im, 70, 0, 50 + $day_left, 390, $color_255, $font_file_2, $day);
    //————————
    imageline($im, 50, 405, 50 + $year_width, 405, $color_255);
    imageline($im, 50, 406, 50 + $year_width, 406, $color_255);
    //  2019/02
    imagettftext($im, 22, 0, 50, 440, $color_255, $font_file_2, $year);

    //标题
    $str = $gData['title'];
    if(mb_strlen($str)>16){
        $str = mb_substr($str,0,15,"UTF8")."...";
    }
    imagettftext($im, 24,0, 40, 550, $color_0 ,$font_file_1, $str);

    //
    imagettftext($im, 15,0, 40, 610, $color_153 ,$font_file_1, $gData["author"]);

    //-------------------------------------
    $style = array($color_200,$color_200,$color_200,$color_200,$color_200,$color_200,$color_255,$color_255,$color_255,$color_255,$color_255,$color_255);
    imagesetstyle($im, $style);
    imageline($im, 0, 650, 600, 650, IMG_COLOR_STYLED);

    //
    imagettftext($im, 18,0, 40, 715, $color_0 ,$font_file_1, $gData["blogname"]);
    imagettftext($im, 14,0, 40, 755, $color_153 ,$font_file_1, $gData["bloginfo"]);

    //二维码
    $qrcode_str = file_get_contents($gData["code"]);
    $qrcode_size = getimagesizefromstring($qrcode_str);
    $qrcode_img = imagecreatefromstring($qrcode_str);
    imagecopyresized($im, $qrcode_img, 460, 670, 0, 0, 110, 110, $qrcode_size[0], $qrcode_size[1]);
    //ob_clean();
    //输出图片
    imagepng ($im,$fileName);

    //释放空间
    imagedestroy($im);
    imagedestroy($head_img);
    //return true;
}
//poster
function poster_share($id, $url, $pic, $title, $date, $blogname, $bloginfo){
    //图片上传目录
    $upload_dir = 'content/uploadfile/fee_file/poster/';
    //图片名称
    $filename = 'Poster-' . $id . '.png';
    //图片地址
    $file = EMLOG_ROOT . '/' . $upload_dir . $filename;
    //返回浏览连接
    $src = BLOG_URL . $upload_dir . $filename;
    //判断图片是否存在或已超过15天,创建缓存文件
    if( !is_file($file) || ( time() - filemtime($file) ) > 1296000 ){
        global $CACHE;
        $log_cache_sort = $CACHE->readCache('logsort'); 
        $sort = $log_cache_sort[$id]['name'] ? $log_cache_sort[$id]['name'] : '文章';
        global $Tconfig;
        $author = '作者:'.$Tconfig['username'].' 发布在「'.$sort.'」';
        //二维码
        $code = TEMPLATE_URL . 'share/qrcode.php?data=' . $url;
        //数据
        $gData = [
            'pic' => $pic,
            'code' => $code,
            'title' => $title,
            'date' => $date,
            'author' => $author,
            'blogname' => $blogname,
            'bloginfo' => $bloginfo
        ];
        createSharePng($gData,$file);
    }
    return $src;
} 

步骤4

创建图片上传路劲content/uploadfile/fee_file/poster/

打开content/uploadfile/

创建fee_file  然后在打开此文件 在创建poster 即可

结尾

方法既然已经发出来了但是可能不怎么完整  一时间想不出来还有啥没写上去 如果有缺少的下方留言我在写上去

本文由 @会飞的鱼 于 2020-3-1 发布在 会飞的鱼Blog,如无特别说明,本博文章均为原创,转载请保留出处。

网友评论当前共有5条评论

会飞的鱼 在线咨询

在线时间:9:00-22:00
周六、周日:14:00-22:00