php - 使用 php GD 创建 MP4 视频缩略图

标签 php gd thumbnails mp4

我正在使用 GD 图像库上传视频,但我无法创建任何缩略图,有什么方法可以使用 php gb 图像库创建 mp4 视频文件缩略图?

这是我的代码;是否可以集成 ffmpeg?

<?php
if(isset($_POST))
{

############ Edit settings ##############
$ThumbSquareSize        = 400; //Thumbnail will be 200x200
$ThumbPrefix            = "thumb_"; //Normal thumb Prefix
$DestinationDirectory   = 'uploads/'; //specify upload directory ends with / (slash)
$Quality                = 90; //jpeg quality
##########################################

//check if this is an ajax request
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
    die();
}

// check $_FILES['ImageFile'] not empty
if(!isset($_FILES['ImageFile']) || !is_uploaded_file($_FILES['ImageFile']['tmp_name']))
{
        die('Something wrong with uploaded file, something missing!'); // output error when above checks fail.
}

// Random number will be added after image name
$RandomNumber   = rand(0, 9999999999); 

$ImageName      = str_replace(' ','-',strtolower($_FILES['ImageFile']['name'])); //get image name
$ImageSize      = $_FILES['ImageFile']['size']; // get original image size
$TempSrc        = $_FILES['ImageFile']['tmp_name']; // Temp name of image file stored in PHP tmp folder
$ImageType      = $_FILES['ImageFile']['type']; //get file type, returns "image/png", image/jpeg, text/plain etc.

//Let's check allowed $ImageType, we use PHP SWITCH statement here
switch(strtolower($ImageType))
{
    case 'video/mp4':
        break;
    default:
        die('Unsupported File!'); //output error and exit
}

//PHP getimagesize() function returns height/width from image file stored in PHP tmp folder.
//Get first two values from image, width and height. 
//list assign svalues to $CurWidth,$CurHeight
list($CurWidth,$CurHeight)=getimagesize($TempSrc);

//Get file extension from Image name, this will be added after random name
$ImageExt = substr($ImageName, strrpos($ImageName, '.'));
$ImageExt = str_replace('.','',$ImageExt);

//remove extension from filename
$ImageName      = preg_replace("/\\.[^.\\s]{3,4}$/", "", $ImageName); 

//Construct a new name with random number and extension.
$NewImageName = $ImageName.'-'.$RandomNumber.'.'.$ImageExt;
$pageurl = 'http://'.@$_SERVER['HTTP_HOST'].strtr(dirname($_SERVER['SCRIPT_NAME']), '\\', '/').'';
//set the Destination Image
$thumb_DestRandImageName    = $DestinationDirectory.$ThumbPrefix.$NewImageName; //Thumbnail name with destination directory
$DestRandImageName          = $DestinationDirectory.$NewImageName; // Image with destination directory

//Resize image to Specified Size by calling resizeImage function.
if(move_uploaded_file($_FILES['ImageFile']['tmp_name'], $DestinationDirectory.$NewImageName ))
{
    //Create a square Thumbnail right after, this time we are using cropImage() function
    if(!resizeImage($CurWidth,$CurHeight,$ThumbSquareSize,$thumb_DestRandImageName,$Quality,$ImageType))
        {
            echo 'Error Creating thumbnail';
        }
    /*
    We have succesfully resized and created thumbnail image
    We can now output image to user's browser or store information in the database
    */
$variable = <<<XYZ
<div class="kingimgupload">
<iframe src="$pageurl/uploads/$NewImageName" alt="Resized Image"></iframe>
<img src="$pageurl/uploads/$ThumbPrefix$NewImageName" alt="Resized Image">
</div>
XYZ;
echo $variable;
    /*
    // Insert info into database table!
    mysql_query("INSERT INTO myImageTable (ImageName, ThumbName, ImgPath)
    VALUES ($DestRandImageName, $thumb_DestRandImageName, 'uploads/')");
    */

}else{
    die('Resize Error'); //output error
}
}


// This function will proportionally resize image 
function         resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
//Check Image size is not 0
if($CurWidth <= 0 || $CurHeight <= 0) 
{
    return false;
}

//Construct a proportional size of new image
$ImageScale         = min($MaxSize/$CurWidth, $MaxSize/$CurWidth); 
$NewWidth           = ceil($ImageScale*$CurWidth);
$NewHeight          = ceil($ImageScale*$CurHeight);
$NewCanves          = imagecreatetruecolor($NewWidth, $NewHeight);

// Resize Image
if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
{
    switch(strtolower($ImageType))
    {
        case 'video/mp4':
            imagepng($NewCanves,$DestFolder);
            break;
        default:
            return false;
    }
//Destroy image, frees memory   
if(is_resource($NewCanves)) {imagedestroy($NewCanves);} 
return true;
}

}

最佳答案

不,您不能使用 GD 执行此操作。

查看文档

http://php.net/manual/de/book.image.php

您只有以下 imagecreatefrom* 函数:

imagecreatefromgd2
imagecreatefromgd2part
imagecreatefromgd
imagecreatefromgif
imagecreatefromjpeg
imagecreatefrompng
imagecreatefromstring
imagecreatefromwbmp
imagecreatefromwebp
imagecreatefromxbm
imagecreatefromxpm

没有视频格式。所以不,这是不可能的。

看看 FFMpeg 并考虑这个库:

FFMpeg:https://www.ffmpeg.org/

PHP 库:https://github.com/PHP-FFMpeg/PHP-FFMpeg/

当然,大多数共享环境中都没有安装它,但是如果您查看它的契约(Contract),您会发现,视频托管是不允许的。

当然还有其他的可能性,但我无法想象只有 PHP 的方式。

关于php - 使用 php GD 创建 MP4 视频缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25096630/

相关文章:

php - Symfony2 : Hide form field with display:none

合并两个图像的 php 看起来坏了

jQuery 或 CSS 显示外部页面的缩略图

php - mysqli_store_result() 与 mysqli_use_result()

php - 父类别无法删除

php - 调整图像大小并用颜色填充比例间隙

PHP 裁剪图像的形状不是正方形,如椭圆形或圆形

php - 查看子类别时显示 WooCommerce 父类别缩略图

python - 应用引擎 : Calculating the dimensions of thumbnails to be generated by serving thumbnails from the blobstore

php - WordPress 将 the_views 中的 View 作为变量发布