V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ning1022
V2EX  ›  PHP

php 网站截图开发。

  •  
  •   ning1022 · 2016-01-04 15:51:46 +08:00 · 5935 次点击
    这是一个创建于 3278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网站服务器是 linux(查了些资料有个 windows 的实现方法,所以强调下)
    在微信中用,说下最终实现目标吧。
    就是微信回复关键字,生成有用户昵称和头像的二维码,现在遇到的问题是: php 写了个页面,可以获取微信用户头像和昵称,但是在想怎么用 php 获取这个网页的截图,然后返回给用户。
    微信回复图片的功能已经开发好了,

    就是这个 php 获取某个 URL 截图不知道怎么开发。

    第 1 条附言  ·  2016-01-04 23:20:05 +08:00
    用 gd 库写好了,谢谢大家了!
    24 条回复    2016-01-05 11:33:17 +08:00
    chenwl
        1
    chenwl  
       2016-01-04 15:53:49 +08:00
    截图的可以用 phantomjs 执行脚本 到这个网页截图保存
    Kokororin
        2
    Kokororin  
       2016-01-04 15:54:41 +08:00
    cutycapt
    nigelvon
        3
    nigelvon  
       2016-01-04 16:02:00 +08:00
    不如直接用 gd 画一个,听起来不是什么特别复杂的网页。非要做网页截图可以用 phantomJS
    6IbA2bj5ip3tK49j
        4
    6IbA2bj5ip3tK49j  
       2016-01-04 16:03:04 +08:00
    感觉你的需求没必要截图啊,不如说说你要截图干嘛。
    ning1022
        5
    ning1022  
    OP
       2016-01-04 16:05:21 +08:00
    @chenwl
    @Kokororin 这个就有点麻烦了,我只用了个虚拟主机。要是别的没办法,估计我得买云主机了。
    naomhan
        6
    naomhan  
       2016-01-04 16:11:12 +08:00
    感觉你是要做生成名片那种功能,还是画出来比较靠谱
    ning1022
        7
    ning1022  
    OP
       2016-01-04 16:12:34 +08:00
    @xgfan
    @nigelvon
    如图
    yanwen
        8
    yanwen  
       2016-01-04 16:13:02 +08:00
    之前记得站内有人发过出来。。好久之前了 不记得了。。搜索看看吧。
    jarlyyn
        9
    jarlyyn  
       2016-01-04 16:13:36 +08:00
    wildimage/gd 直接画?

    画背景图,画前景图,画文字
    cond0r
        10
    cond0r  
       2016-01-04 16:14:34 +08:00
    设置好图片模版,然后获取头像的数据,写入,然后 gd 生生二维码和昵称 拼接一下就好了,也不用截图
    6IbA2bj5ip3tK49j
        11
    6IbA2bj5ip3tK49j  
       2016-01-04 16:15:46 +08:00
    @ningyuqiao456 如果是固定的,应该是可以画出来的。
    如果真的是要截图。 V 站有人做过。/t/81942
    可惜已经停止服务了,而且个人信息也清空了。
    l1905
        12
    l1905  
       2016-01-04 16:27:07 +08:00
    可以考虑 html=>pdf=>image , 开销可能会比较大
    qiayue
        13
    qiayue  
       2016-01-04 16:45:50 +08:00
    直接用 GD 画图,很简单的,看看 php.net 上的文档就行
    chaegumi
        14
    chaegumi  
       2016-01-04 17:35:54 +08:00
    用 phantomjs ,我就是这样做的。 http://phantomjs.org/screen-capture.html , php 调用命令的方式
    wd0g
        15
    wd0g  
       2016-01-04 18:06:18 +08:00
    php 怕是不行,html 是由浏览器来格式化的
    你 php 只能获取到 html
    dapang1221
        16
    dapang1221  
       2016-01-04 18:16:39 +08:00 via Android
    不用截图。直接通过 gd 库,把所需要的东西叠加在一张模板图片上就行
    Tink
        17
    Tink  
       2016-01-04 18:18:07 +08:00 via iPhone
    模版是统一好的嘛?是的话就提取昵称和头像然后填到模版里
    Kokororin
        18
    Kokororin  
       2016-01-04 18:37:22 +08:00
    @ningyuqiao456 既然只要昵称和头像,直接用 gd 生成即可
    imnpc
        19
    imnpc  
       2016-01-04 20:18:08 +08:00
    当然是 GD 生成啊
    [code]
    $affiliate = unserialize($GLOBALS['_CFG']['affiliate']);
    $level_register_up = (float)$affiliate['config']['level_register_up'];
    $rank_points = $GLOBALS['db']->getOne("SELECT rank_points FROM " . $GLOBALS['ecs']->
    table('users') . "where user_id=" . $user_id);
    if ($rank_points < $level_register_up)
    {
    $msgType = "text";
    $contentStr = "您还不是分销商,暂时不能获取推广二维码.";
    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
    $this->universal($fromUsername, $base_url);
    $this->insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);
    echo $resultStr;
    exit;
    }

    $ArticleCount = 1;
    $scene_id = $user_id;
    $affiliate = $user_id;
    $gourl = $base_url . 'wechat/egg/index1.php?scene_id=' . $scene_id;
    $type = 'tj';
    $qr_path = $db->getOne("SELECT `qr_path` FROM `wxch_qr` WHERE `scene_id`='$scene_id'");
    $user_name = $db->getOne("SELECT `user_name` FROM `ecs_users` WHERE `user_id`='$scene_id'");

    $scene = $user_name;

    $qr_path = $db->getOne("SELECT `qr_path` FROM `wxch_qr_tianxin100` WHERE `scene_id`='$scene_id'");
    /**/
    if (!empty($qr_path))
    {
    $surl = $qr_path;
    $data = dirname(__FILE__) . "/qrcode/" . $surl;
    } else
    {
    $action_name = "QR_LIMIT_SCENE";
    $json_arr = array('action_name' => $action_name, 'action_info' => array('scene' =>
    array('scene_id' => $scene_id)));
    $data = json_encode($json_arr);
    $this->access_token($db);
    $ret = $db->getRow("SELECT `access_token` FROM `wxch_config`");
    $access_token = $ret['access_token'];
    if (strlen($access_token) >= 64)
    {
    $url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $access_token;
    $res_json = $this->curl_grab_page($url, $data);
    $json = json_decode($res_json);
    }
    $ticket = $json->ticket;

    if ($ticket)
    {
    $ticket_url = urlencode($ticket);
    $ticket_url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . $ticket_url;
    $imageinfo = $this->downloadimageformweixin($ticket_url);
    $time = time();
    $url = $_SERVER['HTTP_HOST'];
    $path = '../images/qrcode/' . $time . '.jpg';
    $surl = "http://" . $url . '/images/qrcode/' . $time . '.jpg';
    $local_file = fopen($path, 'a');
    $h_path = '../images/qrcode/head/' . $time . '.jpg';
    $h_local_file = fopen($h_path, 'a');
    $headimgurl = $db->getOne("SELECT `headimgurl` FROM `wxch_user` WHERE `wxid`='$fromUsername'");
    $h_imageinfo = $this->downloadimageformweixin($headimgurl);
    if (false !== $local_file)
    {

    if (false !== fwrite($local_file, $imageinfo) && false !== fwrite($h_local_file,
    $h_imageinfo))
    {
    fclose($local_file);
    //将生成的二维码图片的地址放到数据库中
    $insert_sql = "INSERT INTO `wxch_qr` (`type`,`action_name`,`ticket`, `scene_id`, `scene` ,`qr_path`,`function`,`affiliate`,`endtime`,`dateline`) VALUES
    ('$type','$action_name', '$ticket',$scene_id, '$scene' ,'$surl','$function','$affiliate','$endtime','$dateline')";
    $db->query($insert_sql);

    }

    }
    }

    $imgsrc = "../images/qrcode/" . $time . ".jpg";
    $h_imgsrc = "../images/qrcode/head/" . $time . ".jpg";
    $width = 230;
    $height = 230;
    $time = time();
    $name = $this->resizejpg($imgsrc, $width, $height, $time);
    $imgs = $name;
    //处理头像
    $width = 100;
    $height = 100;
    $h_time = $time . "_1";
    $h_name = $this->resizejpg($h_imgsrc, $width, $height, $h_time);
    $h_imgs = $h_name;
    $target = '../qrcode/tianxin100.jpg'; //背景图片
    $target_img = Imagecreatefromjpeg($target);
    $source = Imagecreatefromjpeg($imgs);
    $h_source = Imagecreatefromjpeg($h_imgs);
    imagecopy($target_img, $source, 155, 462, 0, 0, 230, 230);
    imagecopy($target_img, $h_source, 60, 28, 0, 0, 100, 100);
    $fontfile = "simsun.ttf";
    #水印文字
    $nickname = $db->getOne("SELECT `nickname` FROM `wxch_user` WHERE `wxid`='$fromUsername'");
    #打水印
    $textcolor = imagecolorallocate($target_img, 0, 0, 255);
    imagettftext($target_img, 18, 0, 268, 59, $textcolor, $fontfile, $nickname);
    Imagejpeg($target_img, 'qrcode/' . $time . '.jpg');
    $data = dirname(__FILE__) . "/qrcode/" . $time . ".jpg";
    $s_data = $time . ".jpg";
    $insert_sql = "INSERT INTO `wxch_qr_tianxin100` (`qr_path`,`scene`,`scene_id`, `nickname`) VALUES
    ('$s_data','$scene', '$scene_id','$nickname')";
    $db->query($insert_sql);

    }

    $filedata = array("media" => "@" . $data);
    $this->access_token($db);
    $ret = $db->getRow("SELECT `access_token` FROM `wxch_config`");
    $access_token = $ret['access_token'];
    if (strlen($access_token) >= 64)
    {
    $url = 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=' . $access_token .
    '&type=image';

    $res_json = $this->https_request($url, $filedata);

    $json = json_decode($res_json);
    }
    $msgType = "image";
    $iipp = $_SERVER["REMOTE_ADDR"];
    $phone_state = $_SERVER['HTTP_USER_AGENT'];
    $contentStr = $json->media_id;
    $resultStr = sprintf($imageTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
    $this->insert_wmessage($db, $fromUsername, $contentStr, $time, $belong);
    $this->universal($fromUsername, $base_url);
    echo $resultStr;
    exit;
    }
    [/code]
    dsphper
        20
    dsphper  
       2016-01-04 23:04:21 +08:00
    @imnpc 我擦,这代码写的。。。。。。你是怕别人能维护啊?
    uglyer
        21
    uglyer  
       2016-01-04 23:23:15 +08:00 via iPhone
    参考水印合成的吧,最好理解了。
    mathoidliu
        22
    mathoidliu  
       2016-01-05 11:30:57 +08:00
    我靠, 一看头像以为是发神 @Aufree
    mathoidliu
        23
    mathoidliu  
       2016-01-05 11:32:46 +08:00
    mathoidliu
        24
    mathoidliu  
       2016-01-05 11:33:17 +08:00
    这么牛逼的头像....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:07 · PVG 10:07 · LAX 18:07 · JFK 21:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.