PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP基于ffmPEg实现转换视频,截图及生成缩略图方法分享给大家供大家参考,具体如下:

这里把ffmpeg 和 生成缩略图整合了一下:

resizeimage("1.jpg",30,"small1.jpg");
class ImageResize {
  //图片类型
  VAR $type;
  //实际度
  var $width;
  //实际高度
  var $height;
  //改变后的宽度
  var $resize_width;
  //改变后的高度
  var $resize_height;
  //是否裁图
  var $cut;
  //图象
  var $srcimg;
  //目标图象地址
  var $dstimg;
  //临时创建的图象
  var $im;
function resizeimage($img,$wid,$hei,$c,$dstpath) {
    $this->srcimg = $img;
    $this->resize_width = $wid;
    $this->resize_height = $hei;
    $this->cut = $c;
    //图片的类型
    $this->type = strtolower(substr(strrchr($this->srcimg,"."),1));
    //初始化图象
    $this->inITi_img();
    //目标图象地址
    $this -> dst_img($dstpath);
    //--
    $this->width = imagesx($this->im);
    $this->height = imagesy($this->im);
    //生成图象
    $this->newimg();
    ImageDestroy ($this->im);
  }
function newimg() {
//改变后的图象的比例
    $resize_ratio = ($this->resize_width)/($this->resize_height);
//实际图象的比例
    $ratio = ($this->width)/($this->height);
if(($this->cut)=="1") {
      //裁图 高度优先
      if($ratio>=$resize_ratio){
        $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);
        imagecopyresampled($newimg,$this->im,$this->resize_width,$this->resize_height,(($this->height)*$resize_ratio),$this->height);
        ImageJpeg ($newimg,$this->dstimg);
      }
      //裁图 宽度优先
      if($ratio<$resize_ratio) {="" $newimg="imagecreatetruecolor($this-">resize_width,$this->width,(($this->width)/$resize_ratio));
        ImageJpeg ($newimg,$this->dstimg);
      }
    } else {
      //不裁图
      if($ratio>=$resize_ratio) {
        $newimg = imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);
        imagecopyresampled($newimg,($this->resize_width)/$ratio,$this->dstimg);
      }
      if($ratio<$resize_ratio) {="" $newimg="imagecreatetruecolor(($this-">resize_height)*$ratio,($this->resize_height)*$ratio,$this->dstimg);
      }
    }
  }
//初始化图象
  function initi_img() {
    if($this->type=="jpg") {
      $this->im = imagecreatefromjpeg($this->srcimg);
    }
    if($this->type=="gif") {
      $this->im = imagecreateFromgif($this->srcimg);
    }
    if($this->type=="png") {
      $this->im = imagecreatefrompng($this->srcimg);
    }
    if($this->type=="bmp") {
      $this->im = $this->imagecreatefrombmp($this->srcimg);
    }
  }
//图象目标地址
  function dst_img($dstpath) {
    $full_length = strlen($this->srcimg);
    $type_length = strlen($this->type);
    $name_length = $full_length-$type_length;
    $name = substr($this->srcimg,$name_length-1);
    $this->dstimg = $dstpath;
    //echo $this->dstimg;
  }
  function ConvertBMP2GD($src,$dest = false) {
    if(!($src_f = fopen($src,"rb"))) {
      return false;
    }
    if(!($dest_f = fopen($dest,"wb"))) {
      return false;
    }
    $header = unpack("vtype/Vsize/v2reserved/Voffset",fread($src_f,14));
    $info = unpack("Vsize/Vwidth/Vheight/vplanes/vbits/VcomPression/Vimagesize/Vxres/Vyres/VNColor/Vimportant",40));
    extract($info);
    extract($header);
    if($type != 0x4D42) { // signature "BM"
      return false;
    }
    $palette_size = $offset - 54;
    $ncolor = $palette_size / 4;
    $gd_header = "";
    // true-color vs. palette
    $gd_header .= ($palette_size == 0) ? "\xFF\xFE" : "\xFF\xFF";
    $gd_header .= pack("n2",$width,$height);
    $gd_header .= ($palette_size == 0) ? "\x01" : "\x00";
    if($palette_size) {
      $gd_header .= pack("n",$ncolor);
    }
    // no transparency
    $gd_header .= "\xFF\xFF\xFF\xFF";
fwrite($dest_f,$gd_header);
if($palette_size) {
      $palette = fread($src_f,$palette_size);
      $gd_palette = "";
      $j = 0;
      while($j < $palette_size)="" {="" $b="$palette{$j++};" $g="$palette{$j++};" $r="$palette{$j++};" $a="$palette{$j++};" $gd_palette="" .="$r$g$b$a" ;="" }="" $gd_palette="" .="str_repeat("\x00\x00\x00\x00",256" -="" $ncolor);="" fwrite($dest_f,$gd_palette);="" }="" $scan_line_size="(($bits" *="" $width)="" +="" 7)="">> 3;
    $scan_line_align = ($scan_line_size & 0x03) ? 4 - ($scan_line_size &
    0x03) : 0;
for($i = 0,$l = $height - 1; $i < $height;="" $i++,$l--)="" {="" bmp="" stores="" scan="" lines="" starting="" from="" bottom="" fseek($src_f,$offset="" +="" (($scan_line_size="" +="" $scan_line_align)="" *="" $l));="" $scan_line="fread($src_f,$scan_line_size);" if($bits="=" 24)="" {="" $gd_scan_line="" ;="" $j="0;" while($j="">< $scan_line_size)="" {="" $b="$scan_line{$j++};" $g="$scan_line{$j++};" $r="$scan_line{$j++};" $gd_scan_line="" .="\x00$r$g$b" ;="" }="" }="" else="" if($bits="=" 8)="" {="" $gd_scan_line="$scan_line;" }="" else="" if($bits="=" 4)="" {="" $gd_scan_line="" ;="" $j="0;" while($j="">< $scan_line_size)="" {="" $byte="ord($scan_line{$j++});" $p1="chr($byte">> 4);
          $p2 = chr($byte & 0x0F);
          $gd_scan_line .= "$p1$p2";
        }
        $gd_scan_line = substr($gd_scan_line,$width);
      }
      else if($bits == 1) {
        $gd_scan_line = "";
        $j = 0;
        while($j < $scan_line_size)="" {="" $byte="ord($scan_line{$j++});" $p1="chr((int)" (($byte="" &="" 0x80)="" !="0));" $p2="chr((int)" (($byte="" &="" 0x40)="" !="0));" $p3="chr((int)" (($byte="" &="" 0x20)="" !="0));" $p4="chr((int)" (($byte="" &="" 0x10)="" !="0));" $p5="chr((int)" (($byte="" &="" 0x08)="" !="0));" $p6="chr((int)" (($byte="" &="" 0x04)="" !="0));" $p7="chr((int)" (($byte="" &="" 0x02)="" !="0));" $p8="chr((int)" (($byte="" &="" 0x01)="" !="0));" $gd_scan_line="" .="$p1$p2$p3$p4$p5$p6$p7$p8" ;="" }="" $gd_scan_line="substr($gd_scan_line,$width);" }="" fwrite($dest_f,$gd_scan_line);="" }="" fclose($src_f);="" fclose($dest_f);="" return="" true;="" }="" function="" imagecreatefrombmp($filename)="" {="" $tmp_name="tempnam("/tmp","GD");" if($this-="">ConvertBMP2GD($filename,$tmp_name)) {
      $img = imagecreatefromgd($tmp_name);
      unlink($tmp_name);
      return $img;
    }
    return false;
  }
}

脚本宝典总结

以上是脚本宝典为你收集整理的PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法全部内容,希望文章能够帮你解决PHP基于ffmpeg实现转换视频,截图及生成缩略图的方法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。