php 資料流怎麼轉化為圖片

2022-10-21 10:00:41

php資料流轉化為圖片的方法:1、建立一個PHP範例檔案;2、通過「class imageUpload {...}」方式定義一個圖片類;3、通過「public function image($save_name) {...}」方法建立並寫入資料流;4、通過「getimageInfo」方法獲取圖片資訊即可。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。

php 資料流怎麼轉化為圖片?

php 接收二進位制流轉換成圖片

php 接收二進位制流轉換成圖片,圖片類imageUpload.php如下:

<?php
/**
 * 圖片類
* @author http://blog.csdn.net/haiqiao_2010
* @version 1.0
*
* PHP預設只識別application/x-www.form-urlencoded標準的資料型別。
* 因此,對型如text/xml 或者 soap 或者 application/octet-stream 之類的內容無法解析,如果用$_POST陣列來接收就會失敗!
* 故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA'] 來接收。 
* 另外還有一項 php://input 也可以實現此這個功能 
* php://input 允許讀取 POST 的原始資料。和 $HTTP_RAW_POST_DATA 比起來,它給記憶體帶來的壓力較小,並且不需要任何特殊的 php.ini 設定。php://input和 $HTTP_RAW_POST_DATA 不能用於 enctype="multipart/form-data"。
*/
class imageUpload {
    const ROOT_PATH = './';
    const FAIL_WRITE_DATA = 'Fail to write data';
    //沒有資料流
    const NO_STREAM_DATA = 'The post data is empty';
    //圖片型別不正確
    const NOT_CORRECT_TYPE = 'Not a correct image type';
    //不能建立檔案
    const CAN_NOT_CREATE_FILE = 'Can not create file';
    //上傳圖片名稱
    public $image_name;
    //圖片儲存名稱
    public $save_name;
    //圖片儲存路徑
    public $save_dir;
    //目錄+圖片完整路徑
    public $save_fullpath;     /**
     * 建構函式
     * @param String $save_name 儲存圖片名稱
     * @param String $save_dir 儲存路徑名稱
     */
    public function __construct($save_name, $save_dir) {
        //set_error_handler ( $this->error_handler () );         //設定儲存圖片名稱,若未設定,則隨機產生一個唯一檔名
        $this->save_name = $save_name ? $save_name : md5 ( mt_rand (), uniqid () );
        //設定儲存圖片路徑,若未設定,則使用年/月/日格式進行目錄儲存
        $this->save_dir =  $save_dir ? self::ROOT_PATH .$save_dir : self::ROOT_PATH .date ( 'Y/m/d' );         //建立資料夾
        @$this->create_dir ( $this->save_dir );
        //設定目錄+圖片完整路徑
        $this->save_fullpath = $this->save_dir . '/' . $this->save_name;
    }
    //相容PHP4
    public function image($save_name) {
        $this->__construct ( $save_name );
    }     public function stream2Image() {
        //二進位制資料流
        $data = file_get_contents ( 'php://input' ) ? file_get_contents ( 'php://input' ) : gzuncompress ( $GLOBALS ['HTTP_RAW_POST_DATA'] );
        //資料流不為空,則進行儲存操作
        if (! empty ( $data )) {
            //建立並寫入資料流,然後儲存檔案
            if (@$fp = fopen ( $this->save_fullpath, 'w+' )) {
                fwrite ( $fp, $data );
                fclose ( $fp );
                $baseurl = "http://" . $_SERVER ["SERVER_NAME"] . ":" . $_SERVER ["SERVER_PORT"] . dirname ( $_SERVER ["SCRIPT_NAME"] ) . '/' . $this->save_name;
                if ( $this->getimageInfo ( $baseurl )) {
                    echo $baseurl;
                } else {
                    echo ( self::NOT_CORRECT_TYPE  );
                }
            } else {             }
        } else {
            //沒有接收到資料流
            echo ( self::NO_STREAM_DATA );
        }
    }
    /**
     * 建立資料夾
     * @param String $dirName 資料夾路徑名
     */
    public function create_dir($dirName, $recursive = 1,$mode=0777) {
        ! is_dir ( $dirName ) && mkdir ( $dirName,$mode,$recursive );
    }
    /**
     * 獲取圖片資訊,返回圖片的寬、高、型別、大小、圖片mine型別
     * @param String $imageName 圖片名稱
     */
    public function getimageInfo($imageName = '') {
        $imageInfo = getimagesize ( $imageName );
        if ($imageInfo !== false) {
            $imageType = strtolower ( substr ( image_type_to_extension ( $imageInfo [2] ), 1 ) );
            $imageSize = filesize ( $imageInfo );
            return $info = array ('width' => $imageInfo [0], 'height' => $imageInfo [1], 'type' => $imageType, 'size' => $imageSize, 'mine' => $imageInfo ['mine'] );
        } else {
            //不是合法的圖片
            return false;
        }     }     /*private function error_handler($a, $b) {
     echo $a, $b;
    }*/ }
?>
登入後複製

推薦學習:《》

以上就是php 資料流怎麼轉化為圖片的詳細內容,更多請關注TW511.COM其它相關文章!