아무 에디터에 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 하는 방식으로요.
이지웍에디터에 스샷 복붙하면 base64로 붙거든요. 파일로 저장하고 올리면 귀찮으니깐요.. 다른 개념에서 만들기 시작한거긴합니다.
저장은 가능하시다니 아작스로 이미지를 저장하고 xhr 온로드시에 다시 저장된 경로를 받아서 이미지태그의 src 를 replace 하면 그리 어려울 것두 없는데요.

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

회원로그인

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