Aby skopiować klatkę wideo do pliku obrazu, należy prawidłowo załadować wideo, skopiować obraz na płótno i wyeksportować do pliku. Jest to całkowicie możliwe, ale jest kilka miejsc, w których możesz napotkać kłopoty, więc zróbmy to krok po kroku.
1) Ładowanie wideo
Aby uchwycić pikseli, trzeba załadować film na <video>
tagu, a nie iframe
lub object
lub embed
. Plik musi pochodzić z serwera WWW, który jest tą samą stroną, na której się znajduje (chyba że korzystasz z cross-origin headers, co jest skomplikowane i może nie działać w Twojej przeglądarce, co jest ograniczone przez przeglądarkę ze względów bezpieczeństwa. kod ładuje wideo z lokalnego systemu plików, który nie zadziała
Należy również załadować odpowiedni format pliku IE9 + może odtwarzać WMV, ale jest mało prawdopodobne, że jakakolwiek inna przeglądarka będzie. multiple sources korzystając WebM, MP4, a najlepiej Ogg/Theora.
var container = document.getElementById("myVid"),
video = document.createElement('video'),
canCapture = true;
if (!video.canPlayType('video/wmv')) {
/* If you don't have multiple sources, you can load up a Flash fallback here
(like jPlayer), but you won't be able to capture frames */
canCapture = false;
return;
}
video.src = 'myvideo.wmv';
container.appendChild(video);
video.play(); //or put this in a button click handler if you want your own controls
2) Następnie należy utworzyć obszar roboczy i kontekst rysowania. W rzeczywistości nie musisz nawet dołączać go do DOM, ale musisz ustawić go na rozmiar, w którym chcesz zapisać wynikowy obraz. W tym przykładzie zakładamy, że masz na myśli określony wymiar, ale jeśli chcesz, możesz ustawić go na wielokrotność rozmiaru wideo. Po prostu upewnij się, że uruchomisz to w zdarzeniu "loadedmetadata" w filmie, ponieważ wymiary wideo nie będą dostępne od razu.
var canvas = document.createElement('canvas');
canvas.width = 640;
canvas.height = 480;
var ctx = canvas.getContext('2d');
// if you want to preview the captured image,
// attach the canvas to the DOM somewhere you can see it.
3) Zapisz obraz na płótnie i zapisz go w pliku. Umieść ten kod w zdarzeniu onclick
na przycisku lub wewnątrz licznika czasu - jednak chcesz zdecydować, kiedy obraz zostanie przechwycony. Użyj metody drawImage. ([Artykuł] zapewnia dobre wyjaśnienie, w tym kwestie bezpieczeństwa. To samo na filmie jak na obrazie.)
//draw image to canvas. scale to target dimensions
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
//convert to desired file format
var dataURI = canvas.toDataURL('image/jpeg'); // can also use 'image/png'
4) Eksportowanie pliku obrazu
plik jpg zostanie zapisany jako a Data URI, który jest długim łańcuchem javascript reprezentującym zakodowaną wersję pełnego pliku binarnego. Od Ciebie zależy, co z tym zrobić. Możesz umieścić go bezpośrednio w elemencie img
, ustawiając go po prostu na src: myImage.src = dataUri;
.
Jeśli chcesz zapisać plik, musisz go przesłać na serwer. Oto good tutorial, jak to zrobić.
Jak wszystkie powyższe ograniczenia są ograniczone do przeglądarek, które je obsługują.Jeśli zamierzasz trzymać się wideo wmv, jesteś praktycznie ograniczony do Internet Explorera 9+. 6-8 nie obsługują ani tagu wideo, ani płótna. Jeśli możesz dodać więcej formatów wideo, możesz użyć przeglądarki Firefox (3.5+) i Chrome.
Czy chcesz uzyskać migawkę z określonego momentu w odtwarzaczu wideo, czy chcesz zrzutu ekranu w pełnym rozmiarze? Jeśli pytasz o zrzut ekranu odtwarzacza wideo, może to być trochę trudne, ale zrzuty ekranu można obejrzeć na http://stackoverflow.com/questions/4912092/using-html5-canvas-javascript-to-take- Zrzuty ekranu – aug