포럼
외부 이미지의 썸네일 생성방식 변경
2014.06.16 03:14
티스토리의 이미지 링크를 이용할경우 썸네일 생성이 되지 않더군요.
그래서 외부 이미지의 썸네일 생성과정을 살펴보니 모든 src를 검색 후 다시 확장자를 검사해서 이미지 파일인경우 썸네일 생성을 시도하는 형식으로 생각 됩니다.
그리고 첨부파일의 처리부분에는 없는 썸네일의 최대 사이즈를 제한하는 조건문도 존재하네요 @.@
그래서 외부 이미지의 썸네일 생성 부분을 아래처럼 수정해 봤는데 문제 없을지 의견좀 부탁 드립니다. 그리고 외부 이미지의 썸네일 생성과정에만 존재하는 최대 사이즈 제한 부분은 왜 있는것일까요?
현재:
$content에서 src 태그를 모두 검색 후 이미지 파일이 있을경우 썸네일 생성시도.
의문: 원본 이미지보다 큰 사이즈의 썸네일 생성이 불가능 하도록하는 조건문이 있음.
이미지 파일 판단 기준: 확장자가 다음중 하나이면 이미지 파일 (jpg, png, jpeg, gif, bmp)
수정:
$content에서 img 태그를 모두 검색 후 썸네일 생성시도.
원본 이미지보다 큰 사이즈의 썸네일 생성을 막는 코드 삭제
이미지 파일 판단 기준: img 태그를 검색 했으므로 무조건 이미지파일로 판단
개선사항:
확장자가 없는 외부 이미지의 썸네일도 생성 가능. 예) 티스토리의 이미지 링크
modules\document\document.item.php
821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 | // 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
123456789$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 이렇게 개별로 인식되는 경우도 있는데..이런 문제도 해결 되겠네요.~ 오우!
-
일주일 전 부터 고민하던 문제인데 이틀 전에 올라와 있던 글이었네요....딱 그 쯤해서 아 이건 내 수준에 못고치겠다 싶어서 포기했던건데............
역시 포기하면 그 순간 패배하는 거네요........그 때 검색 한 번 더 해볼걸... 좋은 팁 감사합니다
코어에 반영되었으면 좋겠어요..
-
zetix
2014.07.14 14:52
헐 -_-; 혹시 이거 구글 드라이브는 되게 할 수 없나요??
구글 드라이브가 절실한데 ㅠ_ㅠ
-
배워서남준다
2014.09.04 12:32
-
비밀얌
2014.10.16 05:20
구글 드라이브랑 구글 앨범에 있는 사진을 끌어와서 섬네일 만들기 위해서는 http://esource.tistory.com/400 글을 읽어보시면 도움이 됩니다.
-
KrteamENT
2014.07.14 16:08
헉...좋은팁 감사합니다! -
이거 제가 github로 올려 봤는데 제가 맞게 한건지 몰라서 그런데 혹시 많이 올려보신분들 이거좀 반영되게끔 힘써주시면 안될까요??..
-
prologos님이 깃헙에 풀리퀘스트로 올리시면 될 듯 합니다만.
-
@prologos님...
-
boy2
2014.10.20 17:17
1.7.7.2 버전에선 이게 적용된 건가요?
-
안되어있을걸요..
-
김형진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 에디터등으로 업로드한 이미지도 말이죠..
개선사항:
확장자가 없는 외부 이미지의 썸네일도 생성 가능. 예) 티스토리의 이미지 링크