Imager.php 1.97 KB
Newer Older
王源's avatar
王源 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
<?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;
    }

}