포럼
외부 이미지의 썸네일 생성방식 변경
2014.06.16 03:14
티스토리의 이미지 링크를 이용할경우 썸네일 생성이 되지 않더군요.
그래서 외부 이미지의 썸네일 생성과정을 살펴보니 모든 src를 검색 후 다시 확장자를 검사해서 이미지 파일인경우 썸네일 생성을 시도하는 형식으로 생각 됩니다.
그리고 첨부파일의 처리부분에는 없는 썸네일의 최대 사이즈를 제한하는 조건문도 존재하네요 @.@
그래서 외부 이미지의 썸네일 생성 부분을 아래처럼 수정해 봤는데 문제 없을지 의견좀 부탁 드립니다. 그리고 외부 이미지의 썸네일 생성과정에만 존재하는 최대 사이즈 제한 부분은 왜 있는것일까요?
현재:
$content에서 src 태그를 모두 검색 후 이미지 파일이 있을경우 썸네일 생성시도.
의문: 원본 이미지보다 큰 사이즈의 썸네일 생성이 불가능 하도록하는 조건문이 있음.
이미지 파일 판단 기준: 확장자가 다음중 하나이면 이미지 파일 (jpg, png, jpeg, gif, bmp)
수정:
$content에서 img 태그를 모두 검색 후 썸네일 생성시도.
원본 이미지보다 큰 사이즈의 썸네일 생성을 막는 코드 삭제
이미지 파일 판단 기준: img 태그를 검색 했으므로 무조건 이미지파일로 판단
개선사항:
확장자가 없는 외부 이미지의 썸네일도 생성 가능. 예) 티스토리의 이미지 링크
modules\document\document.item.php
// If not exists, file an image file from the content if(!$source_file) { $content = $this->get('content'); $target_src = null; preg_match_all('/<\s*img[^>]*src\s*=\s*["\']?([^"\']*)/i', $content, $matches, PREG_SET_ORDER); $cnt = count($matches); for($i=0;$i<$cnt;$i++) { $target_src = trim($matches[$i][1]); if(preg_match('/\/(common|modules|widgets|addons|layouts)\//i', $target_src)) continue; else { if(!preg_match('/^(http|https):\/\//i',$target_src)) $target_src = Context::getRequestUri().$target_src; $tmp_file = sprintf('./files/cache/tmp/%d', md5(rand(111111,999999).$this->document_srl)); if(!is_dir('./files/cache/tmp')) FileHandler::makeDir('./files/cache/tmp'); FileHandler::getRemoteFile($target_src, $tmp_file); if(!file_exists($tmp_file)) continue; else { $source_file = $tmp_file; $is_tmp_file = true; break; } } } }
댓글 16
-
socialskyo
2014.06.16 09:06
-
prologos
2014.06.16 19:34
오잉? 외부링크 이미지에 대해서도 이미 썸네일도 이미 잘 만들어지고 있는거 아니었나요?
티스토리를 이미지 스토리지로 사용해서 이미지 링크를 걸었을경우 썸네일이 생성되지 않아서 수정해본 내용입니다 @.@
티스토리의 경우 링크가 아래의 형태로 제공되어서 기존 썸네일 생성 방법으로는 해당 링크가 이미지인지 체크를 못해서 썸네일을 못 만들더군요.
http://cfile23.uf.tistory.com/image/16283E504D886A6036AC3F
-
배워서남준다
2014.07.10 00:31
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, '외부이미지'); curl_setopt($curl, CURLOPT_FILETIME, true); curl_setopt($curl, CURLOPT_NOBODY, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_exec($curl); $info = curl_getinfo($curl); curl_close($curl); $mimetype = $info['content_type'];
$mimetype 체크해서 이미지인경우 FileHandler::getRemoteFile() 함수 이용해서 임시폴더에 저장하면 됩니다.
-
socialskyo
2014.06.16 09:52
아.. imgur도 되겠네요. img src로 걸리니까요...
기존 : 이미지 파일 판단 기준: 확장자가 다음중 하나이면 이미지 파일 (jpg, png, jpeg, gif, bmp)
개선 : 이미지 파일 판단 기준: img 태그를 검색 했으므로 무조건 이미지파일로 판단
대단! jpg, jpeg 이렇게 개별로 인식되는 경우도 있는데..이런 문제도 해결 되겠네요.~ 오우!
-
멘탈가루루루루몬
2014.06.18 09:03
일주일 전 부터 고민하던 문제인데 이틀 전에 올라와 있던 글이었네요....딱 그 쯤해서 아 이건 내 수준에 못고치겠다 싶어서 포기했던건데............
역시 포기하면 그 순간 패배하는 거네요........그 때 검색 한 번 더 해볼걸... 좋은 팁 감사합니다
코어에 반영되었으면 좋겠어요..
-
zetix
2014.07.14 14:52
헐 -_-; 혹시 이거 구글 드라이브는 되게 할 수 없나요??
구글 드라이브가 절실한데 ㅠ_ㅠ
-
배워서남준다
2014.09.04 12:32
구글 드라이브는 아래 게시글 참고해서 드라이브내 이미지 검색해서 가져오면 될것 같네요.
http://www.study4you.kr/xe/pds/45294
-
비밀얌
2014.10.16 05:20
구글 드라이브랑 구글 앨범에 있는 사진을 끌어와서 섬네일 만들기 위해서는 http://esource.tistory.com/400 글을 읽어보시면 도움이 됩니다.
-
KrteamENT
2014.07.14 16:08
헉...좋은팁 감사합니다! -
큰성565
2014.10.16 02:44
이거 제가 github로 올려 봤는데 제가 맞게 한건지 몰라서 그런데 혹시 많이 올려보신분들 이거좀 반영되게끔 힘써주시면 안될까요??..
-
이온디
2014.10.17 23:16
prologos님이 깃헙에 풀리퀘스트로 올리시면 될 듯 합니다만.
-
큰성565
2014.10.17 23:46
@prologos님...
-
boy2
2014.10.20 17:17
1.7.7.2 버전에선 이게 적용된 건가요?
-
큰성565
2014.10.22 19:51
안되어있을걸요..
-
김형진354
2014.11.13 16:46
이태그 정말감사합니다 !! 성공하였습니다
-
SUHONE
2015.09.30 23:07
안녕하세요.본문의 아래 소스를 추가를 하는건지 기존에 있던것을 교체를 하는것인지를 잘 모르겠습니다.현재 저는 821째 라인 소스가/**
* @brief Functions to display icons for new post, latest update, secret(private) post, image/video/attachment
* Determine new post and latest update by $time_interval
**/
function getExtraImages($time_interval = 43200) {
if(!$this->document_srl) return;
// variables for icon list
$buffs = array();이런식으로 나가는데... 검색을 해서 가장 좋은 해결책이라 생각하고 적용을 해볼려고 하니 방법을 몰라 문의드립니다.modules\document\document.item.php
821822823824825826827828829830831832833834835836837838839840841842843844845846847848// If not exists, file an image file from the content
if
(!
$source_file
)
{
$content
=
$this
->get(
'content'
);
$target_src
= null;
preg_match_all(
'/<\s*img[^>]*src\s*=\s*["\']?([^"\']*)/i'
,
$content
,
$matches
, PREG_SET_ORDER);
$cnt
=
count
(
$matches
);
for
(
$i
=0;
$i
<
$cnt
;
$i
++)
{
$target_src
= trim(
$matches
[
$i
][1]);
if
(preg_match(
'/\/(common|modules|widgets|addons|layouts)\//i'
,
$target_src
))
continue
;
else
{
if
(!preg_match(
'/^(http|https):\/\//i'
,
$target_src
))
$target_src
= Context::getRequestUri().
$target_src
;
$tmp_file
= sprintf(
'./files/cache/tmp/%d'
, md5(rand(111111,999999).
$this
->document_srl));
if
(!
is_dir
(
'./files/cache/tmp'
)) FileHandler::makeDir(
'./files/cache/tmp'
);
FileHandler::getRemoteFile(
$target_src
,
$tmp_file
);
if
(!
file_exists
(
$tmp_file
))
continue
;
else
{
$source_file
=
$tmp_file
;
$is_tmp_file
= true;
break
;
}
}
}
}
이미지 전문가 prologos님 !!
근데 제가 잘 몰라서 그런데.. 아래 개선 사항을 보면 가르쳐주신 대로 고치게 되면 링크로 걸린 외부이미지도 컨텐츠 위젯등에서 섬네일이 나오게 되는 건가요? 예를 들면 만들어주신 imgur 에디터등으로 업로드한 이미지도 말이죠..
개선사항:
확장자가 없는 외부 이미지의 썸네일도 생성 가능. 예) 티스토리의 이미지 링크