• 微信公众平台开发(77) 图片下载


    微信公众平台的用户头像和接口取到的用户上传图片都做了防盗处理,不能被其他网页引用。

    例如,下面是在引用用户头像的图片的时候,提示未经允许不可引用。

    本文介绍如何下载这些图片的方法!

    一、下载图片所有信息

    使用CURL的方式下载

    function downloadImageFromQzone($url)
    {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 0);    
        curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $package = curl_exec($ch);
        $httpinfo = curl_getinfo($ch);
        
        curl_close($ch);
        $imageAll = array_merge(array('imgBody' => $package), $httpinfo); 
        return $imageAll;
    }

    返回将返回图片的二进制数据及http头信息

    http头如下

    ["url"]=> string(66)"http://mmsns.qpic.cn/mmsns/L4qjYtOibumlqutvkb6r0V0KCjEJM76NFiawL5tDicOZn9ibKgIaiaUfeRA/0" 
    ["content_type"]=> string(10)"image/jpeg" 
    ["http_code"]=> int(200)
    ["header_size"]=> int(374)
    ["request_size"]=> int(258)
    ["filetime"]=> int(-1)
    ["ssl_verify_result"]=> int(0)
    ["redirect_count"]=> int(0)
    ["total_time"]=> float(0.289523)
    ["namelookup_time"]=> float(0.002558)
    ["connect_time"]=> float(0.003475)
    ["pretransfer_time"]=> float(0.003477)
    ["size_upload"]=> float(0)
    ["size_download"]=> float(42240)
    ["speed_download"]=> float(145895)
    ["speed_upload"]=> float(0)
    ["download_content_length"]=> float(42240)
    ["upload_content_length"]=> float(0)
    ["starttransfer_time"]=> float(0.241982)
    ["redirect_time"]=> float(0)

    二、根据http头做一些过滤

    一些明显不符合要求的图片就直接忽略掉,没有必要保存

    $imageExt = (0 < preg_match('{image/(w+)}i', $imageAll["content_type"], $extmatches))? $extmatches[1]: "jpeg";
    if (preg_match('{(jpg|jpeg|png)$}i', $imageExt) == 0){ //非jpg,jpeg,png格式
        $contentStr = "不支持类型";
    }else if ($imageAll["download_content_length"]/1024 > 200){ //大于200K
        $contentStr = "图片太大";
    }else if ($imageAll["total_time"] > 1){ //大于1秒
        $contentStr = "网速太慢";
    }

    三、保存图片二进制数据

    保存到BAE

    $fileUpload = $imageAll["imgBody"];
    require_once (dirname( __FILE__ ). '/bcs/bcs.class.php');
    $host = 'bcs.duapp.com';
    $ak = '';
    $sk = '';
    $bucket = '';
    $filename = time ();
    $object = '/images/'.$filename.'.jpg';
    $baiduBCS = new BaiduBCS ( $ak, $sk, $host );
    $opt = array("acl" => "public-read");
    $response = $baiduBCS->create_object_by_content( $bucket, $object, $fileUpload, $opt );

    保存到SAE

    if (isset($_SERVER['HTTP_APPNAME'])){
        //SAE环境
        $s = new SaeStorage();
        $s->write($domain, $filename, $imageAll["imgBody"]);
    }

    保存到本地

    //本地操作
    $local_file = fopen($filename, 'w');
    if (false !== $local_file){
        if (false !== fwrite($local_file, $imageAll["imgBody"])) {
            fclose($local_file);
        }
    }
  • 相关阅读:
    struts2乱码
    修改maven的war包生成路径
    cookie的坑
    linux jps 命令
    (转)如何使VMware ip与本机ip处于同一网段
    springboot + swagger2 学习笔记
    can not find java.util.map java.lang.Double问题
    为什么不写 @RequestParam 也能拿到参数?
    乱码问题
    PostMan的使用注意事项
  • 原文地址:https://www.cnblogs.com/txw1958/p/weixin77-download-picture.html
Copyright © 2020-2023  润新知