아무 에디터에 base64 이미지 가져오면 png로 저장하여 주는 거 > 그누보드5 팁자료실

그누보드5 팁자료실

아무 에디터에 base64 이미지 가져오면 png로 저장하여 주는 거 정보

아무 에디터에 base64 이미지 가져오면 png로 저장하여 주는 거

본문

아직 미완성입니다. (9/2 업데이트)

 

원리는 게시물을 전송할때 에디터내용중 base64 로 들어가는 걸 찾아서

 

서버에 저장하는 원리입니다.

 

/extend/user.config.php

 


function base64_to_file($base64_string, $extension) {
    $ym = date('ym', G5_SERVER_TIME);
    $data_dir = G5_DATA_PATH.'/editor/'.$ym;
    $data_url = G5_DATA_URL.'/editor/'.$ym;
    if(!is_dir($data_dir)) {
        ($data_dir, G5_DIR_PERMISSION);
        @chmod($data_dir, G5_DIR_PERMISSION);
    }
    $filename = basename($path);
    $chars_array = array_merge(range(0,9), range('a','z'), range('A','Z'));
    shuffle($chars_array);
    $shuffle = implode('', $chars_array);
    $file_name = abs(ip2long($_SERVER['REMOTE_ADDR'])).'_'.substr($shuffle,0,8).'_'.replace_filename($filename);
    $save_dir = sprintf('%s/%s', $data_dir, $file_name.".".$extension);
    $save_url = sprintf('%s/%s', $data_url, $file_name.".".$extension);    
    
    // open the output file for writing
    $ifp = fopen( $save_dir, 'wb' ); 
    // split the string on commas
    // $data[ 0 ] == "data:image/png;base64"
    // $data[ 1 ] == <actual base64 string>
    $data = explode( ',', $base64_string );
    // we could add validation here with ensuring count( $data ) > 1
    fwrite( $ifp, base64_decode( $data[ 1 ] ) );
    // clean up the file resource
    fclose( $ifp ); 
    return $save_url; 
}
function base64_content_image($content) {
    if(!$content) return;
    $content = stripslashes($content);
    $pattern = "#data:image/(gif|png|jpeg);base64,([\w=+/]++)#";
    preg_match($pattern, $content, $match);
    while(isset($match[0]))
    {
        // 이미지 데이터
        $imgdata = $match[0];
        // 확장자
        $extension = explode(";", explode("/", $match[0])[1])[0];        
        $image = base64_to_file($imgdata, $extension);
        //$image = "<p><img src='".$image."'></p>";
        if ($image) {
            $content = str_replace($match[0], $image, $content);
        }
    }
    $content = addslashes($content);
    return $content;
}

 

자신이 사용하는 게시판 스킨

write_update.head.skin.php

 

열고


$wr_content = base64_content_image($wr_content);

저장해주세요.

 

프로젝트가 있어서 만들다 말았는데.. 능력자분께서완성해주시면 감사하겠습니다.

추천
1

댓글 4개

제가 이거 비스무리하게 만든 코드가  있긴 합니다.
첨부파일 관련 코드는 아니구요.

파일업로드시 그 파일이 진짜 jpg 인지 진짜 gif 인지 진짜 png 인지 판별해서 이 3개중 하나가 아니라면 튕겨내고 이 3개 중 하나일 경우에만 업로드를 하는 코드에요.

예를 들어 mp3 파일의 경우도 확장자만 jpg 로 바꿔 올릴 수 있으니까요.
또 원래는 png 인데 확장자를 jpg 로 올릴 때에도 확장자를 바로잡아 주는 코드까지 넣어놓았구요.

음 저 같으면 에디터이미지라면 write_업데이트.php 로 넘어가기 이전에 아작스로 이미지를 업뎃시키는 방법을 사용했을 것 같아요.
onpaste 나 onkeyup 이벤트에서 G5_URL 이 경로의 대가리 문자열이 아닌 이미지라면 ajax 파일업로드 문서로 보냈다가 그 아작스문에서 생성된 주소를 데이터로 받아 이미지경로를 replace 하는 방식으로요.
저장은 가능하시다니 아작스로 이미지를 저장하고 xhr 온로드시에 다시 저장된 경로를 받아서 이미지태그의 src 를 replace 하면 그리 어려울 것두 없는데요.

단지 에디터마다 replace 하는 함수가 달라서 사용하는 에디터에 따라 그 부분은 개별적용을 해야 되겠죠.
전체 2,374 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT