문자열 안의 모든 img 태그안의 src 이미지를 base64 로 치환하기
마스터욱
0
23
0
0
2018-08-14 15:19:34
상황설명을 드리겠습니다.
얼마전 티스토리 API 와 연동을 했습니다.
제 사이트의 게시글을 티스토리에 전송하려는 작업이었습니다.
순조롭게 다 진행이 되었는데, 마지막에 문제가 발생했습니다.
이미지가 있는 게시글의 경우, 이미지 경로가 제 사이트의 경로로 잡혀있다보니 티스토리로 게시글을 전송했을때 이미지에 엑박이 뜨는문제였습니다.
고민을 해보았습니다.
게시글을 전송하기 전에 img 경로에 url 을 붙여버릴까?
이렇게 하면 이미지가 출력되긴 출력된다. 다만 이미지 트래픽을 모두 내 사이트가 부담하게 됩니다.
안 그래도 가난하고 후달리는 삶에, 호스팅까지 업그레이드 시켜야 하겠느냐? 라는 부담감이 발생하기 시작했습니다.
그러다가 문득 떠오르는 아이디어!
img 를 base64로 만들어서 전송해버리자!
관대한 티스토리는 이해해줄것이다!
그런데 작업이 쉽지는 않았습니다.
그넘의 정규식, 규식이형이랑과의 데이트를 해야하기 때문입니다.
하지만~, 역시 굴링이형은 우리를 실망시켜주지 않았습니다.
굴링이형에게 물어보니 깃허브(github)에 버젓이 개발된 소스코드가 존재했습니다.
개발시간을 훨씬 단축시켜준 구글형님과 깃허브님께 이 영광을 바칩니다.
아래는 소스코드입니다.
사용자는 "절대경로" 와 "내용" 만 본인의 변수로 수정하여 사용하시면 됩니다.
그런데 네이버는 지가 알아서 base64로 만들어 버린던데, 이런거 보면 네이버가 편리하긴 편리해~
- //이미지를 base64 로 모두 인코딩하자.
- $offset = 0;
- $srcDir = 절대경로;
- $template_content = 내용;
- while (preg_match('/<img src="([^"]*)"/i', $template_content, $match, PREG_OFFSET_CAPTURE, $offset) >= 1) {
- $matchTag = $match[0][0];
- $matchOffset = $match[0][1];
- $imgFile = $srcDir.'/'.$match[1][0];
- echo "Unable to find image file {$imgFile}\n";
- return;
- }
- $img_tag = "<img src='data:image/".$ext.";base64," . base64_encode(file_get_contents($imgFile)) . "'";
- // Replace the IMG src link tag with IMG embed content
- // offset for next loop
- }
- //echo $template_content;exit;