php 使用 ffmpeg 转换视频,截图,并生成缩略图
http://blog.****.net/toss156/article/details/7003059
把ffmpeg 和 生成缩略图整合了一下。
http://download.****.net/detail/toss156/3830291
把ffmpeg 和
- include("ImageResize.class.php")
-
//转视频 -
$cmd="ffmpeg.exe -i ;starwar.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 1.flv" -
exec($cmd); -
//视频截图 -
$cmd="ffmpeg.exe -i ;starwar.avi -f image2 -ss 10 -s 400*300 -vframes 1 1.jpg" -
exec($cmd); -
//生成缩略图 -
$thumbnail = newImageResize(); -
$thumbnail->resizeimage("1.jpg", 30,30, "small1.jpg");0, -
-
- 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 -> $dstpath);dst_img( -
-
//-- -
$this->width = $this->im);imagesx( -
$this->height = $this->im);imagesy( -
-
//生成图象 -
$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 = $this->resize_width,$this->resize_height);imagecreatetruecolor( -
imagecopyresampled($newimg, $this->im, 0, $this->resize_width,$this->resize_height,0, 0, 0, (( $this->height)*$resize_ratio),$this->height); -
ImageJpeg ($newimg,$this->dstimg); -
} -
-
//裁图 宽度优先 -
if($ratio<</span>$resize_ratio) { -
$newimg = $this->resize_width,$this->resize_height);imagecreatetruecolor( -
imagecopyresampled($newimg, $this->im, 0, $this->resize_width,0, 0, 0, $this->resize_height, $this->width, (( $this->width)/$resize_ratio)); -
ImageJpeg ($newimg,$this->dstimg); -
} -
} else { -
//不裁图 -
if($ratio>=$resize_ratio) { -
$newimg = $this->resize_width,($this->resize_width)/$ratio);imagecreatetruecolor( -
imagecopyresampled($newimg, $this->im, 0, $this->resize_width,0, 0, 0, ( $this->resize_width)/$ratio,$this->width, $this->height); -
ImageJpeg ($newimg,$this->dstimg); -
} -
if($ratio<</span>$resize_ratio) { -
$newimg = $this->resize_height)*$ratio,$this->resize_height);imagecreatetruecolor(( -
imagecopyresampled($newimg, $this->im, 0, $this->resize_height)*$ratio,0, 0, 0, ( $this->resize_height, $this->width, $this->height); -
ImageJpeg ($newimg,$this->dstimg); -
} -
} -
} -
- //初始化图象
-
function initi_img() { -
if($this->type=="jpg") { -
$this->im = $this->srcimg);imagecreatefromjpeg( -
} -
-
if($this->type=="gif") { -
$this->im = $this->srcimg);imagecreatefromgif( -
} -
-
if($this->type=="png") { -
$this->im = $this->srcimg);imagecreatefrompng( -
} -
-
if($this->type=="bmp") { -
$this->im = $this->imagecreatefrombmp($this->srcimg); -
} -
} -
- //图象目标地址
-
function dst_img( $dstpath){ -
$full_length = -
$type_length = -
$name_length = -
$name = substr($this->srcimg,0,$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 = "vtype/Vsize/v2reserved/Voffset",unpack( fread($src_f,14)); -
$info = "Vsize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vncolor/Vimportant",unpack( fread($src_f, 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( == "xFFxFE"0) ? : "xFFxFF"; -
$gd_header .= "n2",pack( $width, $height); -
$gd_header .= $palette_size( == "x01"0) ? : "x00"; -
if($palette_size) { -
$gd_header .= "n",pack( $ncolor); -
} -
// no transparency -
$gd_header .= "xFFxFFxFFxFF"; -
- 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("x00x00x00x00",256 $ncolor);- -
fwrite($dest_f, $gd_palette); -
} -
- $scan_line_size
= $bits(( * $width)+ 7) >> 3; -
$scan_line_align = $scan_line_size( & $scan_line_size0x03) ? 4 - ( & -
0x03) : 0; -
- for($i
= $l0, = $height- $i1; < $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 = $scan_line{$j++});ord( -
$p1 = chr($byte>> 4); -
$p2 = chr($byte& 0x0F); -
$gd_scan_line .= "$p1$p2"; -
} -
$gd_scan_line = substr($gd_scan_line,0, $width); -
} -
else if($bits == 1) { -
$gd_scan_line = ""; -
$j = 0; -
while($j < $scan_line_size){ -
$byte = $scan_line{$j++});ord( -
$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,0, $width); -
} -
fwrite($dest_f, $gd_scan_line); -
} -
fclose($src_f); -
fclose($dest_f); -
return true; -
} -
- function
imagecreatefrombmp( $filename){ -
$tmp_name = "/tmp",tempnam( "GD"); -
if($this->ConvertBMP2GD($filename, $tmp_name)) { -
$img = $tmp_name);imagecreatefromgd( -
unlink($tmp_name); -
return $img; -
} -
return false; -
} -
-
}
源代码下载链接: