관리 메뉴

웹개발자의 기지개

이미지 리사이징해서 이미지파일 업로드하기 1 본문

PHP

이미지 리사이징해서 이미지파일 업로드하기 1

http://portfolio.wonpaper.net 2019. 2. 8. 14:28

업로드되는 이미지파일들 중에 요즘엔 큰이미지가 너무 많다.

결국 많이 쌓이면 로딩과 트래픽, 호스팅 공간의 부담이 된다.

 

이미지파일 업로드시 용량을 줄이면서 바로 업로드 될수 있도록 한다.

 

좋은 포스팅 글이 있어서 아래 주소 블로그님의 소스를 참고하여 수정하여 정리했다.

http://hellogohn.com/post_one75 

 

[먼저 글등록 소스]

 

 

<form enctype="multipart/form-data" action="img_upload_ok.php" method="POST">
  <input name="uploadfile1" class="input" type="file" id="uploadfile1" />
  <input type="submit" value="upload" /> 
</form>

 

 

 

[이미지 업로드 처리 소스 - img_upload_ok.php]

 

 

<?

    // 업로드 폴더 지정
    $uploads_dir = './pds';
    $allowed_ext = array('jpg','jpeg','png','gif');  // 업로드 허용되는 확장자 지정
 
    // 폴더 존재 여부 확인 ( 없으면 생성 )
    if ( !is_dir ( $uploads_dir ) ){
        mkdir( $uploads_dir );
    }
    
    // 변수 정리
    $error = $_FILES['uploadfile1']['error'];
    $name = $_FILES['uploadfile1']['name'];
    $ext = array_pop(explode('.', $name));
    
    // 오류 확인
    if( $error != UPLOAD_ERR_OK ) {
        switch( $error ) {
            case UPLOAD_ERR_INI_SIZE:
            case UPLOAD_ERR_FORM_SIZE:
                echo "파일이 너무 큽니다. ($error)";
                break;
            case UPLOAD_ERR_NO_FILE:
                echo "파일이 첨부되지 않았습니다. ($error)";
                break;
            default:
                echo "파일이 제대로 업로드되지 않았습니다. ($error)";
        }
        exit;
    }
    
    // 확장자 확인
    if( !in_array($ext, $allowed_ext) ) {
        echo "허용되지 않는 확장자입니다.";
        exit;
    }
 
    $url = $uploads_dir . "/". $_FILES[uploadfile1][name];

   

    // 80% 정도 줄인다.
    $filename = compress_image($_FILES[uploadfile1][tmp_name], $url, 80);
    $buffer = file_get_contents($url);

 
    // 파일 정보 출력
    echo "파일 정보
        파일명: $name
        확장자: $ext
        파일형식: {$_FILES['mainImgInput']['type']}
        파일크기: {$_FILES['mainImgInput']['size']} 바이트
        url: {$url}
        filename: {$filename}
        ";
 
 
    // 파일 압축 메소드
    function compress_image($source, $destination, $quality) {
 
        $info = getimagesize($source);
 
        if ($info['mime'] == 'image/jpeg')
            $image = imagecreatefromjpeg($source);
 
        elseif ($info['mime'] == 'image/gif')
            $image = imagecreatefromgif($source);
 
        elseif ($info['mime'] == 'image/png')
            $image = imagecreatefrompng($source);
 
        imagejpeg($image, $destination, $quality);
 
        return $destination;
    }

?>

 

 

처리 소스에서 보는바와 같이 
일단 compress_image 함수로 이미지 용량을 줄여주고
버퍼를 이용해서 파일을 새로 시켜준다.

그리고, compress_image 함수 내에
imagejpeg 함수는 php 기본함수인데 이미지를 jpg 형태로 압축시켜준다.

 

Comments