질문답변

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;

}


관련자료

댓글 0
등록된 댓글이 없습니다.

질문답변

최근글


새댓글


  • 댓글이 없습니다.
알림 0