• PHP 之将网络图片base64编码与解码


    一、效果图

     二、编码

    /**
     * 图片base64编码
     * @param string $img
     * @param bool $imgHtmlCode
     * @return string
     */
    function imgBase64Encode($img = '', $imgHtmlCode = true)
    {
        //如果是本地文件
        if (strpos($img, 'http') === false && !file_exists($img)) {
            return $img;
        }
        //获取文件内容
        $file_content = file_get_contents($img);
        if ($file_content === false) {
            return $img;
        }
        $imageInfo = getimagesize($img);
        $prefiex = '';
        if ($imgHtmlCode) {
            $prefiex = 'data:' . $imageInfo['mime'] . ';base64,';
        }
        $base64 = $prefiex . chunk_split(base64_encode($file_content));
        return $base64;
    }

    三、解码

    /**
     * 片base64解码
     * @param string $base64_image_content 图片文件流
     * @param bool $save_img 是否保存图片
     * @param string $path 文件保存路径
     * @return bool|string
     */
    function imgBase64Decode($base64_image_content = '', $save_img = false, $path = '')
    {
        if (empty($base64_image_content)) {
            return false;
        }
    
        //匹配出图片的信息
        $match = preg_match('/^(data:s*image/(w+);base64,)/', $base64_image_content, $result);
        if (!$match) {
            return false;
        }
    
        //解码图片内容(方法一)
        /*$base64_image = preg_split("/(,|;)/",$base64_image_content);
        $file_content = base64_decode($base64_image[2]);
        $file_type = substr(strrchr($base64_image[0],'/'),1);*/
    
        //解码图片内容(方法二)
        $base64_image = str_replace($result[1], '', $base64_image_content);
        $file_content = base64_decode($base64_image);
        $file_type = $result[2];
    
        //如果不保存文件,直接返回图片内容
        if (!$save_img) {
            return $file_content;
        }
    
        //如果没指定目录,则保存在当前目录下
        if (empty($path)) {
            $path = __DIR__;
        }
        $file_path = $path . "/" . date('Ymd', time()) . "/";
        if (!is_dir($file_path)) {
            //检查是否有该文件夹,如果没有就创建
            mkdir($file_path, 0777, true);
        }
        $file_name = time() . ".{$file_type}";
        $new_file = $file_path . $file_name;
        if (file_exists($new_file)) {
            //有同名文件删除
            @unlink($new_file);
        }
        if (file_put_contents($new_file, $file_content)) {
            return $new_file;
        }
        return false;
    }
  • 相关阅读:
    哈希表
    fastcgi 分布式
    环形队列实现
    队列--双链表实现
    lighttpd fastcgi的搭建
    vim 常用命令
    命令行解析getopt_long
    规范打log
    apt-get &dpkg
    Linux syslog 学习
  • 原文地址:https://www.cnblogs.com/yang-2018/p/12843950.html
Copyright © 2020-2023  润新知