테스트 사이트 - 개발 중인 베타 버전입니다

HOOK 을 이용해서 갤러리 스킨 또는 최신글 스킨에서 GIF 를 MP4로 출력하기

· 5년 전 · 4982 · 9

https://sir.kr/g5_plugin/7521

 

위의 우성짱님의 올리신 자료를 적용했다는 조건하에

쓰는 글입니다.

 

( 웹호스팅의 경우 ffmpeg 설치를 하지 못해서 이 글 적용이 안됩니다. )

 

 

위의 글을 적용했다면 보기 페이지에서는 GIF 파일이 MP4 로 출력되지만,

리스트 페이지나 최신글 에서는 MP4로 출력이 되지 않습니다.

 

왜냐하면 스킨파일에 <img src="경로" /> 이렇게 코드가 있어서,

이것을 이미지태그 <img src="경로" /> 코드를  비디오태그 <video><source src="경로"></video> 이렇게 수정해야 하는 작업이 필요합니다.

 

5.4 버전 이상부터는 HOOK 기능이 들어가서 이것을 비교적 쉽게 적용하는 방법이 있습니다. ( 그래도 할게 많아요 ;; )

img 태그가 들어간 파일마다 img 태그에 HOOK 을 적용하는 것입니다.

 

예)

/theme/basic/skin/board/gallery/list.skin.php 파일이 있으면

 

대략 117번째줄에 아래와 같은 코드가 있습니다.

[code]

if($thumb['src']) {
    $img_content = '<img src="'.$thumb['src'].'" alt="'.$thumb['alt'].'" >';
} else {
    $img_content = '<span class="no_image">no image</span>';
}

echo $img_content;

[/code]

 

이것을 아래와 같이 HOOK을 적용한 코드로 수정해 줍니다.

 

[code]

if($thumb['src']) {
    $img_content = '<img src="'.$thumb['src'].'" alt="'.$thumb['alt'].'" >';
} else {
    $img_content = '<span class="no_image">no image</span>';
}

echo run_replace('thumb_image_tag', $img_content, $thumb);

[/code]

 

위의 예) 처럼 리스트 스킨이나 최신글 스킨의 이미지 출력하는 곳에 HOOK을 다 적용해야하는 과정이 필요합니다. ㅠ_ㅠ

( 이것은 그누보드 5.4.2.9 버전에 일괄 적용하도록 하겠습니다. )

 

그러면 extend/ 폴더에 아무.php 파일을 만들어서 아래 코드를 적용하면 <img src="움직이는.gif" >태그가 일괄적으로 비디오 태그로 출력될것입니다.

 

[code]

add_replace('thumb_image_tag', 'fn_thumb_image_tag_video', 0, 2);

function fn_thumb_image_tag_video($img_tag, $img_info=array()){

    $imgs = $img_info;

    if( isset($imgs['src']) ){
        if( stripos($imgs['src'], G5_DATA_URL) !== false && preg_match('/\.gif$/i', $imgs['src']) ){
            $gif_path = str_replace(G5_DATA_URL, G5_DATA_PATH, $imgs['src']);
            if(function_exists('is_animated_gif') && is_animated_gif($gif_path)){
                
                $mp4_path = preg_replace('/\.gif$/i', '.mp4', $gif_path);

                // mp4 파일이 없으면 image 태그를 리턴
                if( ! file_exists($mp4_path) ){
                    return $img_tag;
                }
                
                $filename = basename($imgs['src']);
                $poster_file = 'poster_'.$filename;
                
                $attribute = '';

                if( isset($imgs['thumb_width']) && $imgs['thumb_width'] < 400 ){
                    $attribute .= ' width = "'.(int) $imgs['thumb_width'].'px" ';

                    if( isset($imgs['thumb_height']) ){
                        $attribute .= ' height = "'.(int) $imgs['thumb_height'].'px" ';
                    }
                }

                $img_tag = '<video poster="'.str_replace($filename, $poster_file, $imgs['src']).'" '.$attribute.' autoplay="autoplay" loop="loop" preload="auto" playsinline webkit-playsinline muted>'.PHP_EOL;
                $img_tag .= '<source src="'.preg_replace('/\.gif$/i', '.mp4', $imgs['src']).'" type="video/mp4" />'.PHP_EOL;
                $img_tag .= '</video>'.PHP_EOL;
            }
        }
    }

    return $img_tag;
}

[/code]

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 9개

와 드디어!

감사합니다!

잘 되네요~
기다리면 복이 오네요.....ㅎㅎ
와우 감사합니다~
오 감사합니다
아직 적용은 못하지만 나중을위해서 ㅠㅠ 감사합니다
오라클클라우드에 그누보드 5.4.2.9 사용중이고,
우성짱님의 gif 파일을 mp4와 webm으로 변환 사용중입니다.
게시판에서 gif ->mp4 변환도 정상적으로 됩니다.

그런데 알려주신 소스 extend/ 에 php로 넣으면

페이지가 작동하지 않습니다.
현재 xxxx.com에서 요청을 처리할 수 없습니다.
HTTP ERROR 500
라고 뜨면서 홈페이지가 아예 열리지 않는데, 제가 뭔가 잘못한걸까요?
우성짱님 자료에 이미 이 내용이 적용되어 있어서, 이 자료를 적용할 필요가 없을겁니다.
함수내용이 중복되면 에러가 일어납니다.

HTTP ERROR 500 는 PHP 에러로그에 기록되니 에러로그를 확인해 보세요.
친절하신 답변 정말 감사합니다.
2년 전
좋은정보 감사합니다.

게시글 목록

번호 제목
24149
24140
24133
24125
24119
24109
24105
24101
24093
24089
24077
24074
24071
24070
24067
24056
24050
24046
24043
24040
24037
24036
24035
24034
24021
24017
24005
24002
23990
23980