我目前正在爲用戶可以上傳.mp4視頻的webstie編程。我想在用戶上傳他的視頻時將縮略圖製作成我的服務器上的.jpg或.png文件。將畫布保存爲PNG或JPEG文件
我遇到的問題是該文件存儲在我的服務器上,但它不被視爲/看作一個圖像文件。
這是我現在的代碼。
HTML部分
<canvas id="c"></canvas>
<video id="v" controls>
<source src="/215003/1.1/videos/7/f9ed57e2b0ee1e87a4cbc17c7b743eff.mp4" type="video/mp4">
</video>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
其中I處理帆布等JavaScript部分
document.addEventListener('DOMContentLoaded', function(){
var v = document.getElementById('v');
var canvas = document.getElementById('c');
var context = canvas.getContext('2d');
var v = document.getElementById("v");
v.addEventListener('canplay', function() {
this.currentTime = this.duration/2;
}, false);
v.addEventListener("loadedmetadata", function (e) {
var cw = this.videoWidth,
ch = this.videoHeight;
console.log(cw);
console.log(ch);
canvas.width = cw;
canvas.height = ch;
draw(this,context,cw,ch);
var dataURL = canvas.toDataURL('image/png');
$.ajax({
type: 'POST',
url: 'saveThumb.php',
data: 'img=' + dataURL
}).done(function(o) {
console.log(dataURL);
console.log('saved');
});
}, false);
},false);
function draw(v,c,w,h) {
c.drawImage(v,0,0,w,h);
setTimeout(draw,20,v,c,w,h);
}
PHP的文件來處理數據和存儲圖像:
<?php
// requires php5
define('UPLOAD_DIR', 'img/');
$img = $_POST['img'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
?>
有人能幫助我嗎? :)
http://php.net/manual/en/function.error-reporting.php並檢查您的控制檯。 –
當你嘗試這個時,你會得到什麼錯誤?您能否通過FTP或其他方式查看圖像文件,或者文件是否作爲圖像文件無法正確存在? –
嗨傑克,我執行程序時沒有遇到任何錯誤。我可以在FTP服務器上看到它的文件和它的大小。但是當我用Windows打開它時,它說該文件無法識別。這是我從'canvas.toDataURL('image/png')獲得的數據;' 數據:圖像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAFoCAYAAADHMkpRAAASdklEQVR4Xu3WQQEAAAgCMelf2iA3GzB8sHMECBAgQIAAAQIpgaXSCk(和更大量的字符) –