2015-12-13 1 views
1

Donc je fais un site web et j'ai une incroyable vidéo star wars avec un fond vert. Et je veux enlever le fond vert (clé chroma) et coller la vidéo sur l'arrière-plan du site html5.Comment supprimer le fond vert d'une vidéo et coller cette vidéo sur le fond du site Web html5 en utilisant seulement html5 et javascript?

J'ai cherché pendant des heures (non jokking) et je ne peux trouver le code complexe qui utilise des images ...

Je voudrais remplacer l'arrière-plan vidéo vert avec rien, puis le coller sur l'arrière-plan du site Web.

Quelqu'un peut-il m'aider? Je sais que c'est un vieux toppic, mais je commence juste à coder et aider serait apprécié.

+0

https: // www.youtube.com/watch?v=eTgFUNUmxRo ceci est la vidéo originale peut-être quelqu'un peut m'aider à mieux avec ceci? – Programmer123

+0

C'est possible.Vous pouvez dessiner une vidéo dans une toile et manipuler les pixels que vous dessinez. Voici le tutoriel (rendu vidéo à l'intérieur de la toile, manipulation d'image par pixel) -> http://html5doctor.com/video-canvas-magic/ –

+0

Vous devez montrer votre code. La question telle qu'elle est actuellement n'est pas appropriée pour Stack Overflow. –

Répondre

1

Informations de départ: Le video element peut être une source d'image pour le canevas html5. Cela signifie qu'un cadre de vidéo peut être dessiné sur (et manipulé par) la toile.

Présentation: La méthode context.getImageData permet d'obtenir les données de pixel RGBA dans un tableau. Après avoir modifié les données de pixel du tableau, context.putImageData remettra les pixels modifiés sur le canevas.

A Plan Utilisez CSS pour positionner un canevas html5 sur l'arrière-plan du site. Utilisez ce canevas pour dessiner des images vidéo sur le site (avec des pixels vidéo verdâtres rendus transparents pour que l'arrière-plan du site soit visible).

(un certain assemblage & l'apprentissage de votre part):

Position un élément de toile de fond html5 couvrant le site Web.

l'intérieur d'une boucle temporelle (requestAnimationFrame):

  1. Effacer la toile: context.clearRect,
  2. Dessiner une image vidéo sur la toile: context.drawImage(video,0,0),
  3. Obtenir les données de pixels de la toile: context.getImageData,
  4. Vérifiez chaque pixel pour "green-ish-ness": if(green>220 && red<20 && blue<20),
  5. Si un pixel est verdâtre, rendez-le transparent: (alpha=0),
  6. Remettez les pixels modifiés sur le canevas: context.putImageData,
  7. Répétez l'étape 1 jusqu'à la fin de la vidéo.

Références pour aider à votre apprentissage

Stackoverflow poste avant au sujet n ° 2: Put the video tag on the Canvas tag

Stackoverflow poste avant en ce qui concerne # 3-6: Looping through pixels in an image

+0

@markeE mais comment définir la gamme de couleurs par exemple. pour le fond avec la couleur bleue, j'ai essayé de le google, mais sans succès :) – Motoo

+0

@Motoo Ajustez simplement l'étape # 4 pour vérifier votre propre forme de "blue-ish-ness". Bien que je n'ai aucune idée de ce qu'est votre cas d'utilisation, vous pouvez commencer par 'rec <20 && green <20 && blue> 220'. :-) – markE

+0

Personnellement, la méthode suivante avec des valeurs plus grandes/plus petites n'a pas fonctionné pour moi et c'est très dangereux à utiliser. Puisqu'une valeur verte relativement bonne peut se produire même à des valeurs très basses, d'autres types de teintes peuvent également se produire. Cette méthode 'green> red + reverse_tolerance && green> blue + tolerance' pour moi fonctionnait mieux, mais encore très mal. N'y a-t-il pas un plus précis? Je pense que le format HSL peut aider plus. – general656