본문 바로가기
PHP, Codeigniter

codeigniter4 섬네일 만들기

by beop07 2023. 3. 30.

기존에 ci4 메뉴얼 보고는 한계가 있어 직접 만들어서 사용했다.

파일처리 관련 모델을 생성하여 아래 함수를 넣어놓고 사용하면 편리하다.

 

    /**
     * makeThumbnail
     * @param string $filePath 업로드 파일경로
     * @param string $fileName 업로드 파일명
     * @param int    $width 가로
     * @param int    $height 세로
     * @param int    $quality 품질
     * @param string $resizePoint : max|min
     * @param bool   $makeForce
     * @return bool
     */
    public function makeThumbnail($filePath, $fileName, $width = 250, $height = 250, $quality = 40, $resizePoint = 'max', $makeForce = false)
    {
        $image = getimagesize($filePath . $fileName);
        $w = $image[0];
        $h = $image[1];
        $imgWidth = $w;
        $imgHeight = $h;
        $make = false;
        $result['status'] = false;

        // 최대값보다 클 경우
        if ($w > $width || $h > $height) {
            $rw = $height / $h;
            $rh = $width / $w;

            if ($resizePoint == 'max') {
                if ($rw < $rh) {
                    $imgHeight = $height;
                    $masterDim = 'height';
                } else {
                    $imgWidth = $width;
                    $masterDim = 'width';
                }
            } else {
                if ($rw < $rh) {
                    $imgWidth = $width;
                    $masterDim = 'width';
                } else {
                    $imgHeight = $height;
                    $masterDim = 'height';
                }
            }
            $make = true;
        } else {
            $result['thumbSizeType'] = 0;
        }

        if ($make === true && $makeForce === false) {
            $image = \Config\Services::image();
            $status = $image->withFile($filePath . DIRECTORY_SEPARATOR . $fileName)
                        ->withResource()
                        ->resize($imgWidth, $imgHeight, true, $masterDim)
                        ->save($filePath . DIRECTORY_SEPARATOR . 'thumb_' . $fileName, $quality);
            if ($status) {
                $result['status'] = true;
                $result['thumbSizeType'] = $masterDim == 'height' ? 1 : 2;
            }
        }
        return $result;
    }
반응형

댓글