类库封装-PHP图片处理工具

2022-04-29 15:33:27 浏览数 (2)

Base64生成图片文件,自动解析格式

代码语言:javascript复制
/**
     * @desc Base64生成图片文件,自动解析格式
     * @param $base64 可以转成图片的base64字符串
     * @param $path 绝对路径
     * @param $filename 生成的文件名
     * @return array 返回的数据,当返回status==1时,代表base64生成图片成功,其他则表示失败
     */
    public function base64ToImage($base64, $path, $filename) {

        $res = array();
        //匹配base64字符串格式
        if (preg_match('/^(data:s*image/(w );base64,)/', $base64, $result)) {
            //保存最终的图片格式
            $postfix = $result[2];
            $base64 = base64_decode(substr(strstr($base64, ','), 1));
            $filename .= '.' . $postfix;
            $path .= $filename;
            //创建图片
            if (file_put_contents($path, $base64)) {
                $res['status'] = 1;
                $res['filename'] = $filename;
            } else {
                $res['status'] = 2;
                $res['err'] = 'Create img failed!';
            }
        } else {
            $res['status'] = 2;
            $res['err'] = 'Not base64 char!';
        }

        return $res;

    }

将图片转成base64字符串

代码语言:javascript复制
/**
     * @desc 将图片转成base64字符串
     * @param string $filename 图片地址
     * @return string
     */
    public function imageToBase64($filename = ''){

        $base64 = '';
        if(file_exists($filename)){
            if($fp = fopen($filename,"rb", 0))
            {
                $img = fread($fp,filesize($filename));
                fclose($fp);
                $base64 = 'data:image/jpg/png/gif;base64,'.chunk_split(base64_encode($img));
            }
        }
        return $base64;

    }

根据图片数组, 拼接成微信九宫格式拼图

代码语言:javascript复制
/**
     * @desc 根据图片数组, 拼接成微信九宫格式拼图 
     * @param  array   $pic_list [带拼成的图片数组]
     * @param  integer $bg_w     [背景图片宽度]
     * @param  integer $bg_h     [背景图片高度]
     * @param  string  $format   [阿里云图片获取参数]
     * @return [type]            [返回一个拼接好的图片(路径)]
     */
    public function mosaicGroupAvatar($pic_list = array(),$bg_w = 500,$bg_h=500,$format="@0e_320w_320h_0c_0i_1o_90Q_1x.jpg"){

        $pic_list       = array(
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png',
            'https://img.yuanmabao.com/zijie/pic/2022/04/29/sbsblqsyhq1.png'
        );

        if(empty($pic_list) || !is_array($pic_list)){
            return false;
        }

        $pic_list = array_slice($pic_list, 0, 9); // 只操作前9个图片
        $background = imagecreatetruecolor($bg_w,$bg_h); // 背景图片
        // int imagecolorallocate ( resource $image , int $red , int $green , int $blue ) 为一幅图像分配颜色
        $color   = imagecolorallocate($background, 202, 201, 201); // 为真彩色画布创建白色背景,再设置为透明
        imagefill($background, 0, 0, $color);           //区域填充
        imagecolortransparent($background, $color);     // 将某个颜色定义为透明色

        $pic_count  = count($pic_list);
        $lineArr    = array();  // 需要换行的位置
        $space_x    = 3;
        $space_y    = 3;
        $line_x  = 0;
        switch($pic_count) {
            case 1: // 正中间
                $start_x = intval($bg_w/4);  // 开始位置X
                $start_y = intval($bg_h/4);  // 开始位置Y
                $pic_w   = intval($bg_w/2); // 宽度
                $pic_h   = intval($bg_h/2); // 高度
                break;
            case 2: // 中间位置并排
                $start_x = 2;
                $start_y = intval($bg_h/4)   3;
                $pic_w   = intval($bg_w/2) - 5;
                $pic_h   = intval($bg_h/2) - 5;
                $space_x = 5;
                break;
            case 3:
                $start_x = 124;   // 开始位置X
                $start_y = 5;    // 开始位置Y
                $pic_w   = intval($bg_w/2) - 5; // 宽度
                $pic_h   = intval($bg_h/2) - 5; // 高度
                $lineArr = array(2);
                $line_x  = 4;
                break;
            case 4:
                $start_x = 4;    // 开始位置X
                $start_y = 5;    // 开始位置Y
                $pic_w   = intval($bg_w/2) - 5; // 宽度
                $pic_h   = intval($bg_h/2) - 5; // 高度
                $lineArr = array(3);
                $line_x  = 4;
                break;
            case 5:
                $start_x = 85.5;   // 开始位置X
                $start_y = 85.5;   // 开始位置Y
                $pic_w   = intval($bg_w/3) - 5; // 宽度
                $pic_h   = intval($bg_h/3) - 5; // 高度
                $lineArr = array(3);
                $line_x  = 5;
                break;
            case 6:
                $start_x = 5;    // 开始位置X
                $start_y = 85.5;   // 开始位置Y
                $pic_w   = intval($bg_w/3) - 5; // 宽度
                $pic_h   = intval($bg_h/3) - 5; // 高度
                $lineArr = array(4);
                $line_x  = 5;
                break;
            case 7:
                $start_x = 166.5;   // 开始位置X
                $start_y = 5;    // 开始位置Y
                $pic_w   = intval($bg_w/3) - 5; // 宽度
                $pic_h   = intval($bg_h/3) - 5; // 高度
                $lineArr = array(2,5);
                $line_x  = 5;
                break;
            case 8:
                $start_x = 80.5;   // 开始位置X
                $start_y = 5;    // 开始位置Y
                $pic_w   = intval($bg_w/3) - 5; // 宽度
                $pic_h   = intval($bg_h/3) - 5; // 高度
                $lineArr = array(3,6);
                $line_x  = 5;
                break;
            case 9:
                $start_x = 5;    // 开始位置X
                $start_y = 5;    // 开始位置Y
                $pic_w   = intval($bg_w/3) - 5; // 宽度
                $pic_h   = intval($bg_h/3) - 5; // 高度
                $lineArr = array(4,7);
                $line_x  = 5;
                break;
        }

        foreach( $pic_list as $k=>$pic_path ) {
            $kk = $k   1;
            if ( in_array($kk, $lineArr) ) {
                $start_x    = $line_x;
                $start_y    = $start_y   $pic_h   $space_y;
            }

            $pic_info = pathinfo($pic_path);
            switch($pic_info['extension'])
            {
                case "png":
                    $resource = imagecreatefrompng($pic_path.$format);
                    break;
                case "jpg":
                    $resource = imagecreatefromjpeg($pic_path.$format);
                    break;
                case "jpeg":
                    $resource = imagecreatefromjpeg($pic_path.$format);
                    break;
                case "gif":
                    $resource = imagecreatefromgif($pic_path.$format);
                    break;
            }
            // $start_x,$start_y copy图片在背景中的位置
            // 0,0 被copy图片的位置   $pic_w,$pic_h copy后的高度和宽度
            // // 最后两个参数为原始图片宽度和高度,倒数两个参数为copy时的图片宽度和高度
            imagecopyresized($background,$resource, $start_x, $start_y, 0, 0, $pic_w, $pic_h, imagesx($resource), imagesy($resource));
            $start_x = $start_x   $pic_w   $space_x;
        }

        $file_name = date('YmdHis').rand(100,999);
        $imagePath = './'.$file_name.'.jpg';
        // 保存图像为 $imagePath.'$fname'.'.jpg'
        $res = imagejpeg($background, $imagePath);  // imagejpeg($background,'./public/$uid_.$group.jpg');
        if ($res === false) {
            return false;
        }
        // 释放内存
        imagedestroy($background);

        return $imagePath;

    }

判断一个url是否是图片链接

代码语言:javascript复制
/**
     * @desc 判断一个url是否是图片链接
     * @param string $img_url
     * @return bool, true 是 , false 否
     */
    public function isImgUrl($img_url = ''){

        if(!preg_match('/.*(.png|.jpg|.jpeg|.gif)$/', $img_url)){
            return true;
        }else{
            $header = get_headers($img_url, 1);
            if(!empty($header['Content-Type'])){
                if(strstr($header['Content-Type'], 'image/')){
                    return true;
                }
            }
        }
        return false;

    }

0 人点赞