晓夏

北漂的女孩

Good Luck To You!

POP3获取文件的内容

浏览量:737

首先先封装一个类文件用于获取文件类型

<?php
// Main ReciveMail Class File - Version 1.0 (03-06-2015)
/*
 * File: recivemail.class.php
 * Description: Reciving mail With Attechment
 * Version: 1.1
 * Created: 03-06-2015
 * Author: Sara Zhou
 */
class receiveMail
{
    var $server='';
    var $username='';
    var $password='';

    var $marubox='';
    var $debug = false;
    var $email='';
    private $server2 = "";
    public $DC;

    /**
     * 参数初始化
     * @param $username 用户名
     * @param $password 用户密码
     * @param $EmailAddress
     * @param string $mailserver 邮件服务器
     * @param string $servertype 邮件协议
     * @param string $port 端口
     * @param bool|false $ssl
     * author        : lianghuiju
     * function_name : receiveMail
     * description   :
     */
    function receiveMail($username,$password,$EmailAddress,$mailserver='localhost',$servertype='pop',$port='110',$ssl = false){
        global $debug;
        if ($servertype == 'imap') {
            if ($port == '') $port = '143';
            $strConnect = '{' . $mailserver . ':' . $port . '}';
        }else{
            $strConnect = '{' . $mailserver . ':' . $port . '/pop3' . ($ssl ? "/ssl" : "") . '}';
            $strConnect_2 = '{' . $mailserver . ':' . $port . '/pop3/notls' . ($ssl ? "/ssl" : "") . '}';
            $this->server2 = $strConnect_2;
        }
        $this->server = $strConnect;
        $this->username = $username;
        $this->password = $password;
        $this->email = $EmailAddress;
        $this->DC = new datacenter();
        $this->debug = $debug ? $debug : false;
    }

    /**
     * 连接邮件服务器
     * @return bool
     * author        : lianghuiju
     * function_name : connect
     * description   :
     */
    function connect() {
        $this->marubox = @imap_open($this->server."INBOX", $this->username, $this->password);
        if (!$this->marubox) {
            $this->server = $this->server2;
            $this->marubox = @imap_open($this->server."INBOX", $this->username, $this->password);
        }

        if (!$this->marubox) {
            return false;
//             echo "Error: Connecting to mail server";
//             exit;
        }
        return true;
    }

    /**
     * 获取邮件头信息,返回数组
     * @param $mid
     * @return array|bool
     * author        : lianghuiju
     * function_name : getHeaders
     * description   :
     * return array(
     *         subject,//主题
     *         ccList,//抄送给
     *         fromBy,//发信人邮箱
     *         fromName,//发信人名字
     *         toNameOth,//收信人名字
     *         mailDate,//发信日期(格式化)
     *         udate,//发信时间戳
     *         toList,//收信人
     * )
     */
    function getHeaders($mid) {
        if(!$this->marubox){
            return false;
        }
        $mail_header=imap_header($this->marubox,$mid);
        $message_id = $mail_header->message_id;
        $cache_message = $this->DC->get_cache_4("shensuMail$message_id");
        //将获取到的信件message_id存入缓存,乳沟缓存中有此信件返回false
        if($cache_message === false){
            if(!$this->debug) {
                $this->DC->set_cache_4("shensuMail$message_id",1,strtotime(date("Y-m-d",strtotime("+2 days"))));
            }
        }else{
            if(!$this->debug) {
                return false;
            }
        }
        $sender=$mail_header->from[0];
        $sender_replyto=$mail_header->reply_to[0];
        if(strtolower($sender->mailbox)!='mailer-daemon' && strtolower($sender->mailbox)!='postmaster') {
            $subject = $this->decode_mime($mail_header->subject);

            $ccList = array();
            if (is_array($mail_header->cc)) {
                foreach ($mail_header->cc as $k => $v) {
                    $ccList[] = $v->mailbox . '@' . $v->host;
                }
            }
            $toList = array();
            if($mail_header->to) {
                foreach ($mail_header->to as $k => $v) {
                    $toList[] = $v->mailbox . '@' . $v->host;
                }
            }
            $ccList = implode(",", $ccList);
            $toList = implode(",", $toList);
            $mail_details = array(
                'fromBy' => strtolower($sender->mailbox) . '@' . $sender->host,
                'fromName' => $this->decode_mime($sender->personal),
                'ccList' => $ccList,//抄送人
                'toNameOth' => $this->decode_mime($sender_replyto->personal),
                'subject' => $subject,
                'mailDate' => date("Y-m-d H:i:s", $mail_header->udate),
                'udate' => $mail_header->udate,
                'toList' => $toList,
            );
            return $mail_details;
        }else{
            return false;
        }
    }

    /**
     * 获取邮件内容
     * @param $mid
     * @param $path
     * @param $imageList
     * @return bool|mixed|string|void
     * author        : lianghuiju
     * function_name : getBody
     * description   :
     */
    function getBody($mid,&$path,$imageList)
    {
        if(!$this->marubox)
            return false;

        $body = $this->get_part($this->marubox, $mid, "TEXT/HTML");
        if ($body == "")
            $body = $this->get_part($this->marubox, $mid, "TEXT/PLAIN");
        if ($body == "") {
            return "";
        }
        //处理图片
        $body=$this->embed_images($body,$path,$imageList);
        return $body;
    }

    function get_mime_type(&$structure) {
        $primary_mime_type = array("TEXT", "MULTIPART", "MESSAGE", "APPLICATION", "AUDIO", "IMAGE", "VIDEO", "OTHER");

        if ($structure->subtype && $structure->subtype != "PNG") {
            return $primary_mime_type[(int)$structure->type] . '/' . $structure->subtype;
        }
        return "TEXT/PLAIN";
    }

    /**
     * 获取信件的结构信息
     * @param $stream
     * @param $msg_number
     * @param $mime_type
     * @param bool|false $structure
     * @param bool|false $part_number
     * @return bool|string
     * author        : lianghuiju
     * function_name : get_part
     * description   :
     *
     */
    function get_part($stream, $msg_number, $mime_type, $structure = false, $part_number = false) {
        if(!$structure) {
            /**
             * imap_fetchstructure()获取信件的结构信息
             * 返回数组,其中数组的type 元素的值代表的意义如下
             * 值代表意义: 0 文字 text 1 复合 multipart 2 信息 message 3 程序 application 4 声音 audio 5 图形 image 6 影像 video 7 其它 other
             * 数组的 encoding 元素的值代表的意义如下
             * 值代表意义: 0 七位 (7 bit) 1 八位 (8 bit) 2 二进位 (binary) 3 BASE64 编码 4 QP 编码 (QuotedPrintable) 5 其它
             */
            $structure = imap_fetchstructure($stream, $msg_number);
        }
        if($structure) {
            if($mime_type == $this->get_mime_type($structure)) {
                if (!$part_number) {
                    $part_number = "1";
                }
                //从信件内文取出指定部分。
                $text = imap_fetchbody($stream, $msg_number, $part_number);

                if ($structure->encoding == 3) {
                    return $this->safeEncoding(imap_base64($text));
                } else if ($structure->encoding == 4) {
                    return $this->safeEncoding(imap_qprint($text));
                } else {
                    return $this->safeEncoding($text);
                }
            }
            /* multipart */
            if($structure->type == 1){
                while(list($index, $sub_structure) = each($structure->parts)) {
                    if ($part_number) {
                        $prefix = $part_number . '.';
                    }
                    $data = $this->get_part($stream, $msg_number, $mime_type, $sub_structure, $prefix . ($index + 1));
                    if ($data) {
                        return $data;
                    }
                }
            }
        }
        return false;
    }

    /**
     * 获取未读邮件总数
     * @return bool|int
     * author        : lianghuiju
     * function_name : getTotalMails
     * description   :
     */
    function getTotalMails() {
        if (!$this->marubox)
            return false;
//        var_dump(imap_search($this->marubox, "UNSEEN"));
//         return imap_headers($this->marubox);
        return imap_num_recent($this->marubox);
    }
    //获取一天内的邮件
    function search_mail(){
        if (!$this->marubox)
            return false;
        $date = date ( "d M Y", strtotime ( "-1 days" ) );
        return $uids = imap_search ($this->marubox, "SINCE \"$date\"", SE_UID );
    }

    /**
     * 获取邮件附件,返回的邮件附件信息数组
     * @param $mid
     * @param $path
     * @return array|bool
     * author        : lianghuiju
     * function_name : GetAttach
     * description   :
     */
    function GetAttach($mid,$path) {
        if (!$this->marubox) {
            return false;
        }
        $struckture = imap_fetchstructure($this->marubox,$mid);
        $files=array();
        if($struckture->parts){
//            var_dump($this->parts);
            foreach($struckture->parts as $key => $value){
                $enc=$struckture->parts[$key]->encoding;
                //取邮件附件
                if($struckture->parts[$key]->ifdparameters){
                    //命名附件,转码
                    $name=$this->decode_mime($struckture->parts[$key]->dparameters[0]->value);
                    $extend =explode("." , $name);
                    $file['extension'] = $extend[count($extend)-1];
                    $file['pathname']  = $this->setPathName($key, $file['extension']);
                    $file['title']     = !empty($name) ? htmlspecialchars($name) : str_replace('.' . $file['extension'], '', $name);
                    $file['size']      = $struckture->parts[$key]->dparameters[1]->value;
//                     $file['tmpname']   = $struckture->parts[$key]->dparameters[0]->value;
                    if(@$struckture->parts[$key]->disposition=="ATTACHMENT"){
                        $file['type']      = 1;
                    }else{
                        $file['type']      = 0;
                    }
                    $files[] = $file;

                    $message = imap_fetchbody($this->marubox,$mid,$key+1);
                    if ($enc == 0)
                        $message = imap_8bit($message);
                    if ($enc == 1)
                        $message = imap_8bit ($message);
                    if ($enc == 2)
                        $message = imap_binary ($message);
                    if ($enc == 3)//图片
                        $message = imap_base64 ($message);
                    if ($enc == 4)
                        $message = quoted_printable_decode($message);
                    if ($enc == 5)
                        $message = $message;
                    $local_path = $path.$file['pathname'];
                    $fp=fopen($local_path,"w");
                    if($fp) {
                        fwrite($fp, $message);
                        fclose($fp);
                    }
                }
                // 处理内容中包含图片的部分
                if($struckture->parts[$key]->parts){
                    foreach($struckture->parts[$key]->parts as $keyb => $valueb){
                        $enc=$struckture->parts[$key]->parts[$keyb]->encoding;
                        if($struckture->parts[$key]->parts[$keyb]->ifdparameters){
                            //命名图片
                            $name=$this->decode_mime($struckture->parts[$key]->parts[$keyb]->dparameters[0]->value);
                            $extend =explode("." , $name);
                            $file['extension'] = $extend[count($extend)-1];
                            $file['pathname']  = $this->setPathName($key, $file['extension']);
                            $file['title']     = !empty($name) ? htmlspecialchars($name) : str_replace('.' . $file['extension'], '', $name);
                            $file['size']      = $struckture->parts[$key]->parts[$keyb]->dparameters[1]->value;
//                             $file['tmpname']   = $struckture->parts[$key]->dparameters[0]->value;
                            $file['type']      = 0;
                            $files[] = $file;

                            $partnro = ($key+1).".".($keyb+1);

                            $message = imap_fetchbody($this->marubox,$mid,$partnro);
                            if ($enc == 0)
                                $message = imap_8bit($message);
                            if ($enc == 1)
                                $message = imap_8bit ($message);
                            if ($enc == 2)
                                $message = imap_binary ($message);
                            if ($enc == 3)
                                $message = imap_base64 ($message);
                            if ($enc == 4)
                                $message = quoted_printable_decode($message);
                            if ($enc == 5)
                                $message = $message;
                            $fp=fopen($path.$file['pathname'],"w");
                            fwrite($fp,$message);
                            fclose($fp);
                        }
                    }
                }
            }
        }
        return $files;
    }


    /**
     * 处理图片
     * @param $body
     * @param $path
     * @param $imageList
     * @return mixed|void
     * author        : lianghuiju
     * function_name : embed_images
     * description   :
     */
    function embed_images(&$body,&$path,$imageList) {
        // get all img tags
        preg_match_all('/<img.*?>/', $body, $matches);
        if (!isset($matches[0])) return;
//        var_dump($matches);
        foreach ($matches[0] as $img) {
            // replace image web path with local path
            preg_match('/src="(.*?)"/', $img, $m);
            preg_match('/alt="(.*?)"/', $img, $t);
//            var_dump($m);
//            var_dump($t);
            if (!isset($m[1])) continue;
            if (!isset($t[1])) continue;
            $arr = parse_url($m[1]);
//            var_dump($arr);
            if (!isset($arr['scheme']) || !isset($arr['path'])) continue;
//             if (!isset($arr['host']) || !isset($arr['path']))continue;
            if ($arr['scheme'] != "http") {
//                $filename = explode("@", $arr['path']);
                $body = str_replace($img, '<img alt="" src="' . $path . $imageList[$t[1]]['pathname'] . '" style="border: none;" />', $body);
            }
        }
        return $body;
    }

    /**
     * 删除邮件
     * @param $mid
     * @return bool
     * author        :lianghuiju
     * function_name : deleteMails
     * description   :
     */
    function deleteMails($mid) {
        if (!$this->marubox) {
            return false;
        }
        imap_delete($this->marubox, $mid);
    }

    /**
     * 关闭连接
     * @return bool
     * author        : lianghuiju
     * function_name : close_mailbox
     * description   :
     */
    function close_mailbox() {
        if (!$this->marubox)
            return false;

        imap_close($this->marubox, CL_EXPUNGE);
    }

    /**
     * 移动邮件到指定分组
     * @param $msglist
     * @param $mailbox
     * @return bool
     * author        : lianghuiju
     * function_name : move_mails
     * description   :
     */
    function move_mails($msglist,$mailbox) {
        if (!$this->marubox) {
            return false;
        }
        imap_mail_move($this->marubox, $msglist, $mailbox);
    }


    /**
     * 创建一个信箱分组
     * @param $mailbox
     * @return bool
     * author        : lianghuiju
     * function_name : creat_mailbox
     * description   :
     */
    function creat_mailbox($mailbox) {
        if (!$this->marubox) {
            return false;
        }
        //imap_renamemailbox($imap_stream, $old_mbox, $new_mbox);
        imap_create($this->marubox, $mailbox);
    }

    function _imap_listmailbox(){
        $res = imap_listmailbox($this->marubox,$this->server,"*");
        if($res){
            return $res;
        }else{
            var_dump(imap_last_error());
        }
    }

    /**
     * 转换邮件标题的字符编码,处理乱码
     * @param $str
     * @return string
     * author        : lianghuiju
     * function_name : decode_mime
     * description   :
     */
    function decode_mime($str){
        $str=imap_mime_header_decode($str);
        $text = $str[0]->text;
        return $this->safeEncoding($text);
    }


    /**
     * 自动获取字符串编码并转换为$outEncoding所指定的编码
     * @param $string
     * @param string $outEncoding
     * @return string
     * author        : lianghuiju
     * function_name : safeEncoding
     * description   :
     */
    public function safeEncoding($string,$outEncoding ='UTF-8') {
        $encode_arr = array('UTF-8','ASCII','GBK','GB2312',"BIG5");
        $encoded = mb_detect_encoding($string, $encode_arr);//自动判断编码
//        var_dump($encoded);
//        $encode = mb_detect_encoding($string, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
        if($encoded) {
            if(in_array(strtolower($encoded),array("cp936","gb18030"))){
                $return_str =  mb_convert_encoding($string, $outEncoding, "GBK");
            }else {
                $return_str =  mb_convert_encoding($string, $outEncoding, $encoded);
            }
        }else{
            $return_str =  mb_convert_encoding($string, $outEncoding, "GBK");
        }
        return $return_str;
    }


    /**
     * Set path name of the uploaded file to be saved.
     * @param  int    $fileID
     * @param  string $extension
     * @access public
     * @return string
     */
    public function setPathName($fileID, $extension) {
        return date('dHis', time()) . $fileID . mt_rand(0, 10000) . '.' . $extension;
    }


}

下面就来说一下使用方式

<?php
/**
 * author        : lianghuiju
 * description   : 获取申诉邮箱邮件
 * createby      : PhpStorm
 */
header("Content-Type: text/html;charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
set_time_limit(0);
$debug = false;
$start_time = microtime(true);
require_once ('receivemail.class.php');
require_once ('Request.php');

$host = 'pop3.jiayuan'.'.com';
$user = 'shensu@jiayuan'.'.com';
$pass = 'love@21.'.'cn';
//本机保存附件的路径
$savePath = setSavePath();
//文件服务器中保存文件的子路径
$server_path = "shensu_files/".date("Ym");

//删除本地下载的附件
$f = glob($savePath."*"); //glob() 函数返回匹配指定模式的文件名或目录。
if($f){
    foreach($f as $v){
        unlink($v);//删除文件。
    }
}

$obj= new receivemail($user,$pass,$user,$host,"pop3","110",false);
$obj->connect();//链接服务器
//获取1天以内的邮件
$search = $obj->search_mail();
if($search && is_array($search)){
    $res = array();
//    var_dump($search);
    foreach($search as $i){
        //获取邮件头信息,并将获取过的邮件的messag_id存入缓存
        $head=$obj->getHeaders($i);
        if($head === false){
            continue;
        }
        $head['i']=$i;
        //处理邮件附件
        $files=$obj->GetAttach($i,$savePath); // 获取邮件附件,返回的邮件附件信息数组
        $imageList=array();
        if(!is_array($files)){$files = array();}
        foreach($files as $k => &$file) {
            //type=1为附件,0为邮件内容图片
            if ($file['type'] == 0) {
                $imageList[$file['title']] = $file;
            }
            //本机所下载的附件全路径
            $loca_file = $savePath . $file['pathname'];
            if (!$debug) {
                compress_images($loca_file, $loca_file);//对大的图片附件进行压缩处理
                upload_photo_http($loca_file, $file['pathname']);//上传到文件服务器
            } else {
                //调试压缩上传
                if (filesize($loca_file) > 2000000) {
                    $fp = pathinfo($loca_file, PATHINFO_BASENAME);
                    compress_images($savePath . $fp, $savePath . "test_" . $fp);
                    upload_photo_http($savePath . "test_" . $fp, $fp);
                    echo "http://help.jyimg.com/" . $server_path . "/test_" . $fp . PHP_EOL;
                    var_dump($head["fromBy"]);
                    var_dump($head["subject"]);
                    echo PHP_EOL;
                }
            }
            //文件服务器端附件访问路径
            $file['server_url'] = "http://help.jyimg.com/" . $server_path . "/" . $file['pathname'];
        }
        $web_path = "http://help.jyimg.com/" . $server_path . "/";
        //获取邮件内容
        $body = $obj->getBody($i,$web_path,$imageList);
        if($body === false){$body = "";}
        $res[]=array(
            'head'=>$head,
            'body'=>$body,
            "attachList"=>$files
        );
    }
    $obj->close_mailbox();
    if(!$res){
        echo_log( "No access to mail ");
        exit();
    }
    if($debug) {
        var_dump($res);
        die;
    }
    /*******将获取的邮件存入数据库**********/
    $sql_str = "";
    $num = 1;
    $update_time = time();
    foreach($res as $mail){
        $send_time = $mail['head']['udate'];
        $from_user = htmlspecialchars(addslashes($mail['head']['fromBy']));
        $subject = htmlspecialchars(addslashes($mail['head']['subject']));
        $content = htmlspecialchars(addslashes($mail['body']));
        $status = 1;
        $attachment = "";
        if($mail['attachList']){
            foreach($mail['attachList'] as $attach){
                $attach['server_url'] =
                $attachment .= $attach['server_url'] ? $attach['server_url']."###" : "";
            }
            $attachment = trim($attachment,"###");
        }
        $num++;
        $sql_str .= "('{$send_time}','{$from_user}','{$subject}','{$content}','{$attachment}',$status,$update_time),";
    }
//测试数据库    $NEW_MDB = new Database(MDB_HOST_TEST,MDB_PORT_TEST,MDB_USER_TEST,MDB_PASSWORD_TEST,MDB_DATABASE_TEST);
    $NEW_MDB = new Database(MDB_HOST_NEW,MDB_PORT_NEW,MDB_USER_NEW,MDB_PASSWORD_NEW,MDB_DATABASE_NEW);
    //$NEW_SDB = new Database(SDB_HOST_NEW,SDB_PORT_NEW,SDB_USER_NEW,SDB_PASSWORD_NEW,SDB_DATABASE_NEW);

    if($sql_str != "") {
        $sql = "INSERT INTO `shensu_mail_inboxs` (`send_time`,`from_user`,`subject`,`content`,`attachment`,`status`,`update_time`) VALUES " . trim($sql_str, ',');
        if($NEW_MDB->query($sql)){
            echo_log("Get {$num} mails to database success");
        }
    }else{
        echo_log("Not sql insert");
    }
}
$end_time = microtime(true);
$total_time = $end_time - $start_time;
echo_log("This php script total runtime {$total_time}s");

/**
 * 创建本机保存附件的路径
 * @return string
 * author        : lianghuiju
 * function_name : setSavePath
 * description   :
 */
function setSavePath() {
    $savePath = DATA_ROOT_PATH."check/shensu/";
    if (!file_exists($savePath)) {
        @mkdir($savePath, 0755, true);
    }
    $savePath = rtrim($savePath,"/") . '/';
    return $savePath;
}

/**
 * 上传附件到文件服务器
 * @param $local_filename 本机保存的附件全路径
 * @param $server_filename 文件服务器端将保存的文件名
 * @return bool
 * author        : lianghuiju
 * function_name : upload_photo_http
 * description   :
 */
function upload_photo_http($local_filename, $server_filename){
    if(!SendQuery($server_filename,$local_filename, 0))
    {
       // unlink($local_filename);
        echo_log("upload attachment fail {$local_filename}");
        return false;
    }
//    unlink($local_filename);
    echo_log("upload attachment success");
    return true;
}

/**
 * 调用接口上传附件
 * @param $server_filename文件服务器端保存的文件名
 * @param $local_filename本机的附件全路径
 * @param $action_type 0:上传 1;删除
 * @return bool
 * author        : lianghuiju
 * function_name : SendQuery
 * description   :
 */
function SendQuery($server_filename,$local_filename,$action_type){
    global $server_path;
    $http_url = "http://10.0.1.236:8000/check_upload_new.php";
    $req = &new HTTP_Request($http_url);

    $req->addQueryString("type","photo");
    if($action_type==0) {
        $req->setMethod(HTTP_REQUEST_METHOD_POST);
        $req->addQueryString("path", $server_path);
        $req->addQueryString("act", "upload");
//        $req->addQueryString("debug", "1");
        $result = $req->addFile($server_filename, $local_filename);
        if (PEAR::isError($result)) {
            $result->getMessage();
            return false;
        }
    }else if($action_type == 1){
        $req->setMethod(HTTP_REQUEST_METHOD_GET);
        $req->addQueryString("act","delete");
        $req->addQueryString("deletepath", $server_path.'/');
        $req->addQueryString("deletefile", $server_filename);
    }


    $response = $req->sendRequest();
//    var_dump($req->getUrl('')).PHP_EOL;
//    var_dump($req).PHP_EOL;
    if (PEAR::isError($response))
    {
        //$response->getMessage().PHP_EOL;
        return false;
    }
    else
    {
        $return = json_decode($req->getResponseBody(),true);
        $ResponseCode = $req->getResponseCode();
        echo $ResponseCode.PHP_EOL;
        var_dump($return);
        var_dump($req->getResponseBody());
        if ($ResponseCode >= 400 ) return false;
        if(!$return) return false;
        if ($return['flag'] == false) return false;
        else return true;
    }
}

/**
 * 输出格式化日志
 * @param $str
 * author        : lianghuiju
 * function_name : echo_log
 * description   :
 */
function echo_log($str){
    echo date("Y-m-d H:i:s")." ".$str.PHP_EOL;
}


/**
 * desription 压缩图片
 * @param sting $imgsrc 图片路径
 * @param string $imgdst 压缩后保存路径
 */
function compress_images($imgsrc,$imgdst){
    if(!file_exists($imgsrc)){
        return false;
    }
    $file_type =  strtolower(pathinfo($imgsrc,PATHINFO_EXTENSION));
    $file_size = filesize($imgsrc);
    if(!in_array($file_type,array("jpg","gif","png"))){
        return false;
    }
    //换算为M,超过2M则压缩
    if(($file_size/1024/1024) < 2){
        return false;
    }
    list($w,$h,$type)=getimagesize($imgsrc);
    $width = 5000;//最大宽高
    $height = 5000;
    //计算图片缩放后的大小
    if($width/$w<$height/$h){
        $dw=$width;
        $dh=$h*($width/$w);
    }else{
        $dw=$w*($height/$h);
        $dh=$height;
    }
    switch($type){
        case 1:
            //创建模板图片画布
            $giftype=check_gifcartoon($imgsrc);
            if($giftype){
                $image_wp=imagecreatetruecolor($dw, $dh);
                $image = imagecreatefromgif($imgsrc);
                imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $dw, $dh, $w, $h);
                imagegif($image_wp, $imgdst);
                imagedestroy($image_wp);
            }
            break;
        case 2:
            $image_wp=imagecreatetruecolor($dw, $dh);
            $image = imagecreatefromjpeg($imgsrc);
            imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $dw, $dh, $w, $h);
            imagejpeg($image_wp, $imgdst);
            imagedestroy($image_wp);
            break;
        case 3:
            $image_wp=imagecreatetruecolor($dw, $dh);
            $image = imagecreatefrompng($imgsrc);
            imagecopyresampled($image_wp, $image, 0, 0, 0, 0, $dw, $dh, $w, $h);
            imagepng($image_wp, $imgdst);
            imagedestroy($image_wp);
            break;
        default:
            break;
    }
}

/**
 * desription 判断是否gif动画
 * @param sting $image_file图片路径
 * @return boolean t 是 f 否
 */
function check_gifcartoon($image_file){
    $fp = fopen($image_file,'rb');
    $image_head = fread($fp,1024);
    fclose($fp);
    return preg_match("/".chr(0x21).chr(0xff).chr(0x0b).'NETSCAPE2.0'."/",$image_head)?false:true;
}


神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。