国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP基于ffmpeg實現轉換視頻,截圖及生成縮略圖的方法

2024-05-04 21:50:06
字體:
來源:轉載
供稿:網友

這里把ffmpeg 和  生成縮略圖整合了一下:

  1. include("ImageResize.class.php"
  2.  //轉視頻 
  3.  $cmd="ffmpeg.exe -i starwar.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 1.flv"
  4.  exec($cmd); 
  5.  //視頻截圖 
  6.  $cmd="ffmpeg.exe -i starwar.avi -f image2 -ss 10 -s 400*300 -vframes 1 1.jpg"
  7.  exec($cmd); 
  8.  //生成縮略圖 
  9.  $thumbnail=newImageResize(); 
  10.  $thumbnail->resizeimage("1.jpg", 30,30, 0,"small1.jpg"); 
  11. classImageResize { 
  12.   //圖片類型 
  13.   var$type
  14.   //實際寬度 
  15.   var$width
  16.   //實際高度 
  17.   var$height
  18.   //改變后的寬度 
  19.   var$resize_width
  20.   //改變后的高度 
  21.   var$resize_height
  22.   //是否裁圖 
  23.   var$cut
  24.   //源圖象 
  25.   var$srcimg
  26.   //目標圖象地址 
  27.   var$dstimg
  28.   //臨時創建的圖象 
  29.   var$im
  30. functionresizeimage($img,$wid,$hei,$c,$dstpath) { 
  31.     $this->srcimg =$img
  32.     $this->resize_width =$wid
  33.     $this->resize_height =$hei
  34.     $this->cut =$c
  35.     //圖片的類型 
  36.     $this->type =strtolower(substr(strrchr($this->srcimg,"."),1)); 
  37.     //初始化圖象 
  38.     $this->initi_img(); 
  39.     //目標圖象地址 
  40.     $this-> dst_img($dstpath); 
  41.     //-- 
  42.     $this->width = imagesx($this->im); 
  43.     $this->height = imagesy($this->im); 
  44.     //生成圖象 
  45.     $this->newimg(); 
  46.     ImageDestroy ($this->im); 
  47.   } 
  48. functionnewimg() { 
  49. //改變后的圖象的比例 
  50.     $resize_ratio= ($this->resize_width)/($this->resize_height); 
  51. //實際圖象的比例 
  52.     $ratio= ($this->width)/($this->height); 
  53. if(($this->cut)=="1") { 
  54.       //裁圖 高度優先 
  55.       if($ratio>=$resize_ratio){ 
  56.         $newimg= imagecreatetruecolor($this->resize_width,$this->resize_height); 
  57.         imagecopyresampled($newimg,$this->im, 0, 0, 0, 0,$this->resize_width,$this->resize_height, (($this->height)*$resize_ratio),$this->height); 
  58.         ImageJpeg ($newimg,$this->dstimg); 
  59.       } 
  60.       //裁圖 寬度優先 
  61.       if($ratio<$resize_ratio) { 
  62.         $newimg= imagecreatetruecolor($this->resize_width,$this->resize_height); 
  63.         imagecopyresampled($newimg,$this->im, 0, 0, 0, 0,$this->resize_width,$this->resize_height,$this->width, (($this->width)/$resize_ratio)); 
  64.         ImageJpeg ($newimg,$this->dstimg); 
  65.       } 
  66.     }else
  67.       //不裁圖 
  68.       if($ratio>=$resize_ratio) { 
  69.         $newimg= imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio); 
  70.         imagecopyresampled($newimg,$this->im, 0, 0, 0, 0,$this->resize_width, ($this->resize_width)/$ratio,$this->width,$this->height); 
  71.         ImageJpeg ($newimg,$this->dstimg); 
  72.       } 
  73.       if($ratio<$resize_ratio) { 
  74.         $newimg= imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height); 
  75.         imagecopyresampled($newimg,$this->im, 0, 0, 0, 0, ($this->resize_height)*$ratio,$this->resize_height,$this->width,$this->height); 
  76.         ImageJpeg ($newimg,$this->dstimg); 
  77.       } 
  78.     } 
  79.   } 
  80. //初始化圖象 
  81.   functioniniti_img() { 
  82.     if($this->type=="jpg") { 
  83.       $this->im = imagecreatefromjpeg($this->srcimg); 
  84.     } 
  85.     if($this->type=="gif") { 
  86.       $this->im = imagecreatefromgif($this->srcimg); 
  87.     } 
  88.     if($this->type=="png") { 
  89.       $this->im = imagecreatefrompng($this->srcimg); 
  90.     } 
  91.     if($this->type=="bmp") { 
  92.       $this->im =$this->imagecreatefrombmp($this->srcimg); 
  93.     } 
  94.   } 
  95. //圖象目標地址 
  96.   functiondst_img($dstpath) { 
  97.     $full_length=strlen($this->srcimg); 
  98.     $type_length=strlen($this->type); 
  99.     $name_length=$full_length-$type_length
  100.     $name=substr($this->srcimg,0,$name_length-1); 
  101.     $this->dstimg =$dstpath
  102.     //echo $this->dstimg; 
  103.   } 
  104.   functionConvertBMP2GD($src,$dest= false) { 
  105.     if(!($src_f=fopen($src,"rb"))) { 
  106.       returnfalse; 
  107.     } 
  108.     if(!($dest_f=fopen($dest,"wb"))) { 
  109.       returnfalse; 
  110.     } 
  111.     $header= unpack("vtype/Vsize/v2reserved/Voffset",fread($src_f,14)); 
  112.     $info= unpack("Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant",fread($src_f, 40)); 
  113.     extract($info); 
  114.     extract($header); 
  115.     if($type!= 0x4D42) {// signature "BM" 
  116.       returnfalse; 
  117.     } 
  118.     $palette_size=$offset- 54; 
  119.     $ncolor=$palette_size/ 4; 
  120.     $gd_header=""
  121.     // true-color vs. palette 
  122.     $gd_header.= ($palette_size== 0) ?"/xFF/xFE":"/xFF/xFF"
  123.     $gd_header.= pack("n2",$width,$height); 
  124.     $gd_header.= ($palette_size== 0) ?"/x01":"/x00"
  125.     if($palette_size) { 
  126.       $gd_header.= pack("n",$ncolor); 
  127.     } 
  128.     // no transparency 
  129.     $gd_header.="/xFF/xFF/xFF/xFF"
  130. fwrite($dest_f,$gd_header); 
  131. if($palette_size) { 
  132.       $palette=fread($src_f,$palette_size); 
  133.       $gd_palette=""
  134.       $j= 0; 
  135.       while($j<$palette_size) { 
  136.         $b=$palette{$j++}; 
  137.         $g=$palette{$j++}; 
  138.         $r=$palette{$j++}; 
  139.         $a=$palette{$j++}; 
  140.         $gd_palette.="$r$g$b$a"
  141.       } 
  142.       $gd_palette.=str_repeat("/x00/x00/x00/x00", 256 -$ncolor); 
  143.       fwrite($dest_f,$gd_palette); 
  144.     } 
  145. $scan_line_size= (($bits*$width) + 7) >> 3; 
  146.     $scan_line_align= ($scan_line_size& 0x03) ? 4 - ($scan_line_size
  147.     0x03) : 0; 
  148. for($i= 0,$l=$height- 1;$i<$height;$i++,$l--) { 
  149.       // BMP stores scan lines starting from bottom 
  150.       fseek($src_f,$offset+ (($scan_line_size+$scan_line_align) *$l)); 
  151.       $scan_line=fread($src_f,$scan_line_size); 
  152.       if($bits== 24) { 
  153.         $gd_scan_line=""
  154.         $j= 0; 
  155.         while($j<$scan_line_size) { 
  156.           $b=$scan_line{$j++}; 
  157.           $g=$scan_line{$j++}; 
  158.           $r=$scan_line{$j++}; 
  159.           $gd_scan_line.="/x00$r$g$b"
  160.         } 
  161.       } 
  162.       elseif($bits== 8) { 
  163.         $gd_scan_line=$scan_line
  164.       } 
  165.       elseif($bits== 4) { 
  166.         $gd_scan_line=""
  167.         $j= 0; 
  168.         while($j<$scan_line_size) { 
  169.           $byte= ord($scan_line{$j++}); 
  170.           $p1=chr($byte>> 4); 
  171.           $p2=chr($byte& 0x0F); 
  172.           $gd_scan_line.="$p1$p2"
  173.         } 
  174.         $gd_scan_line=substr($gd_scan_line, 0,$width); 
  175.       } 
  176.       elseif($bits== 1) { 
  177.         $gd_scan_line=""
  178.         $j= 0; 
  179.         while($j<$scan_line_size) { 
  180.           $byte= ord($scan_line{$j++}); 
  181.           $p1=chr((int) (($byte& 0x80) != 0)); 
  182.           $p2=chr((int) (($byte& 0x40) != 0)); 
  183.           $p3=chr((int) (($byte& 0x20) != 0)); 
  184.           $p4=chr((int) (($byte& 0x10) != 0)); 
  185.           $p5=chr((int) (($byte& 0x08) != 0)); 
  186.           $p6=chr((int) (($byte& 0x04) != 0)); 
  187.           $p7=chr((int) (($byte& 0x02) != 0)); 
  188.           $p8=chr((int) (($byte& 0x01) != 0)); 
  189.           $gd_scan_line.="$p1$p2$p3$p4$p5$p6$p7$p8"
  190.         } 
  191.         $gd_scan_line=substr($gd_scan_line, 0,$width); 
  192.       } 
  193.       fwrite($dest_f,$gd_scan_line); 
  194.     } 
  195.     fclose($src_f); 
  196.     fclose($dest_f); 
  197.     returntrue; 
  198.   } 
  199. functionimagecreatefrombmp($filename) { 
  200.     $tmp_name= tempnam("/tmp","GD"); 
  201.     if($this->ConvertBMP2GD($filename,$tmp_name)) { 
  202.       $img= imagecreatefromgd($tmp_name); 
  203.       unlink($tmp_name); 
  204.       return$img
  205.     } 
  206.     returnfalse; 
  207.   } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高邮市| 繁峙县| 郑州市| 都江堰市| 临夏市| 金川县| 广水市| 信阳市| 民权县| 惠来县| 阿坝县| 清水县| 屏山县| 榕江县| 达州市| 定远县| 富锦市| 新余市| 浦江县| 鄂托克前旗| 漯河市| 怀安县| 保靖县| 东阳市| 罗江县| 杭州市| 拉萨市| 大宁县| 孝义市| 德清县| 五华县| 泾阳县| 石渠县| 什邡市| 利辛县| 五常市| 美姑县| 留坝县| 嘉义县| 城市| 建阳市|