HOOK 을 이용해서 갤러리 스킨 또는 최신글 스킨에서 GIF 를 MP4로 출력하기 > 그누보드5 팁자료실

그누보드5 팁자료실

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

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

본문

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번째줄에 아래와 같은 코드가 있습니다.


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;

 

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

 


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);

 

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

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

 

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

 


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;
}
추천
11
  • 복사

댓글 9개

오라클클라우드에 그누보드 5.4.2.9 사용중이고,
우성짱님의 gif 파일을 mp4와 webm으로 변환 사용중입니다.
게시판에서 gif ->mp4 변환도 정상적으로 됩니다.

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

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

HTTP ERROR 500 는 PHP 에러로그에 기록되니 에러로그를 확인해 보세요.
© SIRSOFT
현재 페이지 제일 처음으로