<?php
/**
 * Created by PhpStorm.
 * User: Zero
 * Date: 2020/9/17
 * Time: 8:40
 */

namespace Meibuyu\Micro\Tools;

use Exception;

/**
 * 图片工具类
 * Class Imager
 * @package Meibuyu\Micro\Tools
 */
class Imager
{

    /**
     * 图片转base64,暂不支持外部地址图片
     * @param $path
     * @param bool $noPrefix 不需要前缀
     * @return string
     * @throws Exception
     */
    public static function img2Base64($path, $noPrefix = false)
    {
        $path = self::parsePath($path);
        if (file_exists($path)) {
            $fp = fopen($path, "r"); // 图片是否可读权限
            if ($fp) {
                $imgInfo = getimagesize($path); // 取得图片的大小,类型等
                $content = fread($fp, filesize($path));
                $content = chunk_split(base64_encode($content)); // base64编码
                if ($noPrefix) {
                    $base64 = $content;
                } else {
                    $base64 = 'data:' . $imgInfo['mime'] . ';base64,' . $content; // 合成图片的base64编码
                }
                fclose($fp);
                return $base64;
            } else {
                throw new Exception('图片读取失败');
            }
        } else {
            throw new Exception('图片不存在');
        }
    }

    /**
     * @param $path
     * @return string
     * @throws Exception
     */
    public static function parsePath($path)
    {
        if (strstr($path, 'http')) {
            $appDomain = config('app_domain');
            if (strstr($path, $appDomain)) {
                $path = str_replace($appDomain, '', $path);
            } else {
                throw new Exception('暂不支持外部地址图片');
            }
        }
        $documentRoot = config('server.settings.document_root');
        if (!strstr($path, $documentRoot)) {
            $path = trim(trim($path), '/');
            $path = $documentRoot . '/' . $path;
        }
        return $path;
    }

}