아무 에디터에 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)) {
@mkdir($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
1
댓글 4개
저장은 잘되는 거 같은데 base64데이터를 url로 치환해주는 걸 못하는거같네요.. 능력자분이 해결해주시길..
제가 이거 비스무리하게 만든 코드가 있긴 합니다.
첨부파일 관련 코드는 아니구요.
파일업로드시 그 파일이 진짜 jpg 인지 진짜 gif 인지 진짜 png 인지 판별해서 이 3개중 하나가 아니라면 튕겨내고 이 3개 중 하나일 경우에만 업로드를 하는 코드에요.
예를 들어 mp3 파일의 경우도 확장자만 jpg 로 바꿔 올릴 수 있으니까요.
또 원래는 png 인데 확장자를 jpg 로 올릴 때에도 확장자를 바로잡아 주는 코드까지 넣어놓았구요.
음 저 같으면 에디터이미지라면 write_업데이트.php 로 넘어가기 이전에 아작스로 이미지를 업뎃시키는 방법을 사용했을 것 같아요.
onpaste 나 onkeyup 이벤트에서 G5_URL 이 경로의 대가리 문자열이 아닌 이미지라면 ajax 파일업로드 문서로 보냈다가 그 아작스문에서 생성된 주소를 데이터로 받아 이미지경로를 replace 하는 방식으로요.
첨부파일 관련 코드는 아니구요.
파일업로드시 그 파일이 진짜 jpg 인지 진짜 gif 인지 진짜 png 인지 판별해서 이 3개중 하나가 아니라면 튕겨내고 이 3개 중 하나일 경우에만 업로드를 하는 코드에요.
예를 들어 mp3 파일의 경우도 확장자만 jpg 로 바꿔 올릴 수 있으니까요.
또 원래는 png 인데 확장자를 jpg 로 올릴 때에도 확장자를 바로잡아 주는 코드까지 넣어놓았구요.
음 저 같으면 에디터이미지라면 write_업데이트.php 로 넘어가기 이전에 아작스로 이미지를 업뎃시키는 방법을 사용했을 것 같아요.
onpaste 나 onkeyup 이벤트에서 G5_URL 이 경로의 대가리 문자열이 아닌 이미지라면 ajax 파일업로드 문서로 보냈다가 그 아작스문에서 생성된 주소를 데이터로 받아 이미지경로를 replace 하는 방식으로요.
@비타주리 이지웍에디터에 스샷 복붙하면 base64로 붙거든요. 파일로 저장하고 올리면 귀찮으니깐요.. 다른 개념에서 만들기 시작한거긴합니다.
저장은 가능하시다니 아작스로 이미지를 저장하고 xhr 온로드시에 다시 저장된 경로를 받아서 이미지태그의 src 를 replace 하면 그리 어려울 것두 없는데요.
단지 에디터마다 replace 하는 함수가 달라서 사용하는 에디터에 따라 그 부분은 개별적용을 해야 되겠죠.
단지 에디터마다 replace 하는 함수가 달라서 사용하는 에디터에 따라 그 부분은 개별적용을 해야 되겠죠.