最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 如何獲取視頻第一幀

 更新時(shí)間:2022年10月14日 09:31:44   作者:tjh0001  
這篇文章主要介紹了vue 如何獲取視頻第一幀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue獲取視頻第一幀

findvideocover() {
        let size = 160
        // 獲取video節(jié)點(diǎn)
        const video = document.getElementById("videoPlay");
        video.width = size
        video.height = size
        video.currentTime = 1 // 第一幀
        //創(chuàng)建canvas對(duì)象
        const canvas = document.createElement("canvas")
        canvas.width = size
        canvas.height = size
        this.$nextTick(()=>{
          // 利用canvas對(duì)象方法繪圖
          canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);
          // 轉(zhuǎn)換成base64形式
          const img = canvas.toDataURL("image/jpeg") // 這個(gè)就是圖片的base64
          this.coverUrl = img
        })
      }

vue視頻截取第一幀圖片-組件

Video to Image

關(guān)于vue下視頻截取第一幀網(wǎng)上方法眾多, 我這邊總結(jié)了一下并且歸納成組件, 希望對(duì)為此困擾的你提供一些幫助, 僅需要做一點(diǎn)點(diǎn)的修改頁(yè),本文內(nèi)的代碼可以復(fù)制后直接使用 !

開發(fā)前準(zhǔn)備

確定為vue環(huán)境且不是Vue 1;

本組件附帶了轉(zhuǎn)成圖片后的上傳功能, 確定您安裝了axios, 若不需要, 可以返回圖片的file或blob

開始使用

我是把組件代碼存放在@/components/videoToImg 當(dāng)然您可以自行修改

在需要此功能的使用的vue文件內(nèi)寫入以下

引入

import videotoimg from '@/components/videoToImg'

載入組件

components: {
? ? videotoimg
},

使用

<videotoimg :fileObj="fileObj" @uploadSuccess='onSuccess'></videotoimg>
// 對(duì)應(yīng)數(shù)據(jù)
> data:
fileObj = {
? ?src: blob:http://192.168.3.15:9528/c1df8e08-039b-4da8-a653-4b93f3747d36, // 選取的視頻文件
? ?videoW: number, // 視頻寬度 單位為px
? ?videoH: number, // 視頻高度 單位為px
};
// 這里是視頻上傳成功后返回給你的參數(shù)
> methods:
onSuccess: url => { url = { imgUrl: "/upload/image/20201124/1331153160697417728.jpg" }}

組件文件

這里我將文件命名為@/components/videoToImg/index.vue

<template>
? <div ?style="height: 1px; overflow:hidden; opacity: 0">
? ? <div id="videoArea"></div>
? ? <img :src="imgSrc" />
? ? <div>
? ? ? <div @click="cutPicture">截圖 {{ videoW }}</div>
? ? </div>
? ? <canvas
? ? ? id="myCanvas"
? ? ? :width="videoW + 'px'"
? ? ? :height="videoH + 'px'"
? ? ></canvas>
? </div>
</template>
<script>
import { getRequestHeader } from "@/utils/auth"; // 這里是獲取我自己的請(qǐng)求頭 可以忽略 或者刪除
import axios from "axios";
export default {
? props: {
? ? fileObj: {
? ? ? type: Object,
? ? ? default: {},
? ? ? require: true,
? ? },
? },
? name: "videotoimg",
? watch: {
? ? fileObj: {
? ? ? handler(newVal, oldVal) {
? ? ? ? console.log(newVal, oldVal);
? ? ? ? this.onClean();
? ? ? ? this.videoW = newVal.videoW;
? ? ? ? this.videoH = newVal.videoH;
? ? ? ? this.cutPicture();
? ? ? },
? ? },
? },
? data() {
? ? return {
? ? ? imgSrc: "",
? ? ? videoW: "",
? ? ? videoH: "",
? ? ? headers: getRequestHeader(),
? ? ? uploadUrl: process.env.BASE_API + "v1/general/resource/upload_video", // 截取后上傳的地址
? ? };
? },
? methods: {
? ? onClean() {
? ? ? this.imgSrc = "";
? ? ? this.videoW = "";
? ? ? this.videoH = "";
? ? },
? ? cutPicture() {
? ? ? let area = document.querySelector("#videoArea");
? ? ? area.innerHTML = `
? ? ? ? <video src="${this.fileObj.src}" controls style="width: ${this.videoW}px"></video>
? ? ? `;
? ? ? const that = this;
? ? ? setTimeout(() => {
? ? ? ? var v = document.querySelector("video");
? ? ? ? let canvas = document.getElementById("myCanvas");
? ? ? ? var ctx = canvas.getContext("2d");
? ? ? ? ctx.drawImage(v, 0, 0, this.videoW, this.videoH);
? ? ? ? var oGrayImg = canvas.toDataURL("image/jpeg");
? ? ? ? that.imgSrc = oGrayImg;
? ? ? ? var arr = oGrayImg.split(","),
? ? ? ? ? mime = arr[0].match(/:(.*?);/)[1],
? ? ? ? ? bstr = atob(arr[1]),
? ? ? ? ? n = bstr.length,
? ? ? ? ? u8arr = new Uint8Array(n);
? ? ? ? while (n--) {
? ? ? ? ? u8arr[n] = bstr.charCodeAt(n);
? ? ? ? }
? ? ? ? var file = new File([u8arr], "videoimg.jpg", { type: mime });
? ? ? ? console.info(file); // 注意: 如果你不需上傳,這里就可以拿到圖片的ile了
? ? ? ? that.update(file);?
? ? ? }, 1000);
? ? },
? ? update(file) {
? ? ? // 上傳照片
? ? ? // 這里很簡(jiǎn)單 就是上傳的邏輯 根據(jù)自己需要進(jìn)行修改
? ? ? let self = this;
? ? ? let param = new FormData();
? ? ? param.append("resourceFile", file);?
? ? ? let config = {
? ? ? ? headers: { "Content-Type": "multipart/form-data", ...self.headers },
? ? ? }; // 添加請(qǐng)求頭
? ? ? axios.post(self.uploadUrl, param, config).then((res) => {
? ? ? ? if (res.data.code === 200) {
? ? ? ? ? self.$emit("uploadSuccess", { imgUrl: res.data.data }); // 回傳數(shù)據(jù)!
? ? ? ? }
? ? ? });
? ? },
? },
};
</script>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 完美解決vue中報(bào)錯(cuò)?“TypeError:?Cannot?read?properties?of?null?(reading'forEach')“

    完美解決vue中報(bào)錯(cuò)?“TypeError:?Cannot?read?properties?of?null?

    這篇文章主要介紹了完美解決vue中報(bào)錯(cuò)?“TypeError:?Cannot?read?properties?of?null?(reading?‘forEach‘)“,本文給大家分享詳細(xì)解決方案,需要的朋友可以參考下
    2023-02-02
  • 深入理解Vue3響應(yīng)式原理

    深入理解Vue3響應(yīng)式原理

    響應(yīng)式就是當(dāng)對(duì)象本身(對(duì)象的增刪值)或者對(duì)象屬性(重新賦值)發(fā)生變化時(shí),將會(huì)運(yùn)行一些函數(shù),最常見的就是render函數(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3響應(yīng)式原理的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Vue3中echarts無法縮放的問題及解決方案

    Vue3中echarts無法縮放的問題及解決方案

    很多朋友在使用vue3+echarts5技術(shù)時(shí)會(huì)遇到echarts無法綻放的問題,今天小編就給大家分享下問題描述及解決方案,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • vue.js自定義組件directives的實(shí)例代碼

    vue.js自定義組件directives的實(shí)例代碼

    這篇文章主要介紹了vue.js自定義組件directives的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • vue實(shí)現(xiàn)下載文件流完整前后端代碼

    vue實(shí)現(xiàn)下載文件流完整前后端代碼

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)下載文件流完整前后端代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 使用vue-router切換頁(yè)面時(shí)實(shí)現(xiàn)設(shè)置過渡動(dòng)畫

    使用vue-router切換頁(yè)面時(shí)實(shí)現(xiàn)設(shè)置過渡動(dòng)畫

    今天小編就為大家分享一篇使用vue-router切換頁(yè)面時(shí)實(shí)現(xiàn)設(shè)置過渡動(dòng)畫。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue?Echarts實(shí)現(xiàn)儀表盤案例

    vue?Echarts實(shí)現(xiàn)儀表盤案例

    這篇文章主要為大家詳細(xì)介紹了vue?Echarts實(shí)現(xiàn)儀表盤案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 基于vue組件實(shí)現(xiàn)猜數(shù)字游戲

    基于vue組件實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了基于vue組件實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue中組件的數(shù)據(jù)共享分析講解

    Vue中組件的數(shù)據(jù)共享分析講解

    本文章向大家介紹vue組件中的數(shù)據(jù)共享,主要包括vue組件中的數(shù)據(jù)共享使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-12-12
  • Vue2.x中利用@font-size引入字體圖標(biāo)報(bào)錯(cuò)的解決方法

    Vue2.x中利用@font-size引入字體圖標(biāo)報(bào)錯(cuò)的解決方法

    今天小編就為大家分享一篇Vue2.x中利用@font-size引入字體圖標(biāo)報(bào)錯(cuò)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評(píng)論

神农架林区| 视频| 盐城市| 平度市| 图木舒克市| 鹤壁市| 兴文县| 屏东县| 峨眉山市| 简阳市| 陕西省| 炎陵县| 南澳县| 昌乐县| 舞阳县| 循化| 顺义区| 大城县| 中江县| 余姚市| 大渡口区| 万源市| 乌拉特中旗| 堆龙德庆县| 江津市| 天镇县| 淄博市| 湟源县| 铜鼓县| 通州区| 调兵山市| 贡嘎县| 桓台县| 盐边县| 三都| 蚌埠市| 保山市| 南开区| 永济市| 江山市| 宁都县|