diff --git a/docs/assets/example/thumbnail.js b/docs/assets/example/thumbnail.js index 0d8a857b1..01c3679de 100644 --- a/docs/assets/example/thumbnail.js +++ b/docs/assets/example/thumbnail.js @@ -11,7 +11,6 @@ var thumbnail = new ArtplayerToolThumbnail({ fileInput: $artplayer, number: 60, // 数量 width: 160, // 宽度 - height: 90, // 高度 column: 10, // 列数 begin: 0, // 开始 end: NaN, // 结束 diff --git a/docs/uncompiled/artplayer-tool-thumbnail.js b/docs/uncompiled/artplayer-tool-thumbnail.js index 618d0df0f..a606f7839 100644 --- a/docs/uncompiled/artplayer-tool-thumbnail.js +++ b/docs/uncompiled/artplayer-tool-thumbnail.js @@ -235,7 +235,6 @@ fileInput = _this$option.fileInput, number = _this$option.number, width = _this$option.width, - height = _this$option.height, column = _this$option.column; this.errorHandle(fileInput instanceof Element, "The 'fileInput' is not a Element"); @@ -255,12 +254,11 @@ this.option.fileInput = newFileInput; } - ['number', 'width', 'height', 'column', 'begin', 'end'].forEach(function (item) { + ['number', 'width', 'column', 'begin', 'end'].forEach(function (item) { _this2.errorHandle(typeof _this2.option[item] === 'number', "The '".concat(item, "' is not a number")); }); this.option.number = clamp(number, 10, 1000); this.option.width = clamp(width, 10, 1000); - this.option.height = clamp(height, 10, 1000); this.option.column = clamp(column, 1, 1000); return this; } @@ -295,10 +293,11 @@ }); var _this$option2 = this.option, width = _this$option2.width, - height = _this$option2.height, number = _this$option2.number, begin = _this$option2.begin, end = _this$option2.end; + var height = this.video.videoHeight / this.video.videoWidth * width; + this.option.height = height; this.option.begin = clamp(begin, 0, this.video.duration); this.option.end = clamp(end || this.video.duration, begin, this.video.duration); this.errorHandle(this.option.end > this.option.begin, "End time must be greater than the start time"); diff --git a/docs/uncompiled/artplayer-tool-thumbnail.js.map b/docs/uncompiled/artplayer-tool-thumbnail.js.map index 7b77a11f1..67b2c3c4a 100644 --- a/docs/uncompiled/artplayer-tool-thumbnail.js.map +++ b/docs/uncompiled/artplayer-tool-thumbnail.js.map @@ -1 +1 @@ -{"version":3,"file":"artplayer-tool-thumbnail.js","sources":["../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/createClass.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/inherits.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/typeof.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/getPrototypeOf.js","../../packages/artplayer-tool-thumbnail/node_modules/tiny-emitter/index.js","../../packages/artplayer-tool-thumbnail/src/utils.js","../../packages/artplayer-tool-thumbnail/src/index.js"],"sourcesContent":["export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","export function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function runPromisesInSeries(ps) {\n return ps.reduce((p, next) => p.then(next), Promise.resolve());\n}\n\nexport function getFileName(name) {\n const nameArray = name.split('.');\n nameArray.pop();\n return nameArray.join('.');\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}","import Emitter from 'tiny-emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } from './utils';\n\nclass ArtplayerToolThumbnail extends Emitter {\n constructor(option = {}) {\n super();\n this.processing = false;\n this.option = {};\n this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option));\n this.video = ArtplayerToolThumbnail.creatVideo();\n this.duration = 0;\n this.inputChange = this.inputChange.bind(this);\n this.ondrop = this.ondrop.bind(this);\n this.option.fileInput.addEventListener('change', this.inputChange);\n this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop);\n }\n\n static get DEFAULTS() {\n return {\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n begin: 0,\n end: NaN,\n };\n }\n\n static ondragover(event) {\n event.preventDefault();\n }\n\n ondrop(event) {\n event.preventDefault();\n const file = event.dataTransfer.files[0];\n this.loadVideo(file);\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, number, width, height, column } = this.option;\n\n this.errorHandle(fileInput instanceof Element, \"The 'fileInput' is not a Element\");\n\n if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {\n fileInput.style.position = 'relative';\n const newFileInput = document.createElement('input');\n newFileInput.type = 'file';\n newFileInput.style.position = 'absolute';\n newFileInput.style.width = '100%';\n newFileInput.style.height = '100%';\n newFileInput.style.left = '0';\n newFileInput.style.top = '0';\n newFileInput.style.right = '0';\n newFileInput.style.bottom = '0';\n newFileInput.style.opacity = '0';\n fileInput.appendChild(newFileInput);\n this.option.fileInput = newFileInput;\n }\n\n ['number', 'width', 'height', 'column', 'begin', 'end'].forEach((item) => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n\n this.option.number = clamp(number, 10, 1000);\n this.option.width = clamp(width, 10, 1000);\n this.option.height = clamp(height, 10, 1000);\n this.option.column = clamp(column, 1, 1000);\n return this;\n }\n\n static creatVideo() {\n const video = document.createElement('video');\n video.style.position = 'absolute';\n video.style.top = '-9999px';\n video.style.left = '-9999px';\n video.muted = true;\n video.controls = true;\n document.body.appendChild(video);\n return video;\n }\n\n inputChange(event) {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n event.target.value = '';\n }\n\n loadVideo(file) {\n if (file) {\n const canPlayType = this.video.canPlayType(file.type);\n this.errorHandle(\n canPlayType === 'maybe' || canPlayType === 'probably',\n `Playback of this file format is not supported: ${file.type}`,\n );\n const videoUrl = URL.createObjectURL(file);\n this.videoUrl = videoUrl;\n this.file = file;\n this.emit('file', this.file);\n this.video.src = videoUrl;\n this.emit('video', this.video);\n }\n }\n\n start() {\n if (!this.video.duration) return sleep(1000).then(() => this.start());\n const { width, height, number, begin, end } = this.option;\n this.option.begin = clamp(begin, 0, this.video.duration);\n this.option.end = clamp(end || this.video.duration, begin, this.video.duration);\n this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`);\n this.duration = this.option.end - this.option.begin;\n this.density = number / this.duration;\n this.errorHandle(this.file && this.video, 'Please select the video file first');\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`);\n const screenshotDate = this.creatScreenshotDate();\n const canvas = this.creatCanvas();\n const context2D = canvas.getContext('2d');\n this.emit('canvas', canvas);\n const promiseList = screenshotDate.map((item, index) => () => {\n return new Promise((resolve) => {\n this.video.oncanplay = () => {\n context2D.drawImage(this.video, item.x, item.y, width, height);\n canvas.toBlob((blob) => {\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.thumbnailUrl = URL.createObjectURL(blob);\n this.emit('update', this.thumbnailUrl, (index + 1) / number);\n this.video.oncanplay = null;\n resolve();\n });\n };\n this.video.currentTime = item.time;\n });\n });\n this.processing = true;\n return runPromisesInSeries(promiseList)\n .then(() => {\n this.processing = false;\n this.emit('done');\n })\n .catch((err) => {\n this.processing = false;\n this.emit('error', err.message);\n throw err;\n });\n }\n\n creatScreenshotDate() {\n const { number, width, height, column, begin } = this.option;\n const timeGap = this.duration / number;\n const timePoints = [begin + timeGap];\n while (timePoints.length < number) {\n const last = timePoints[timePoints.length - 1];\n timePoints.push(last + timeGap);\n }\n return timePoints.map((item, index) => ({\n time: item - timeGap / 2,\n x: (index % column) * width,\n y: Math.floor(index / column) * height,\n }));\n }\n\n creatCanvas() {\n const { number, width, height, column } = this.option;\n const canvas = document.createElement('canvas');\n const context2D = canvas.getContext('2d');\n canvas.width = width * column;\n canvas.height = Math.ceil(number / column) * height + 30;\n context2D.fillStyle = 'black';\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n context2D.font = '14px Georgia';\n context2D.fillStyle = '#fff';\n context2D.fillText(\n `From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`,\n 10,\n canvas.height - 11,\n );\n return canvas;\n }\n\n download() {\n this.errorHandle(\n this.file && this.thumbnailUrl,\n 'Download does not seem to be ready, please create preview first',\n );\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n const elink = document.createElement('a');\n const name = `${getFileName(this.file.name)}.png`;\n elink.download = name;\n elink.href = this.thumbnailUrl;\n document.body.appendChild(elink);\n elink.click();\n document.body.removeChild(elink);\n this.emit('download', name);\n return this;\n }\n\n errorHandle(condition, msg) {\n if (!condition) {\n this.emit('error', msg);\n throw new Error(msg);\n }\n }\n\n destroy() {\n this.option.fileInput.removeEventListener('change', this.inputChange);\n this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop);\n document.body.removeChild(this.video);\n if (this.videoUrl) {\n URL.revokeObjectURL(this.videoUrl);\n }\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.emit('destroy');\n }\n}\n\nexport default ArtplayerToolThumbnail;\n"],"names":["setPrototypeOf","assertThisInitialized","tinyEmitterModule","sleep","ms","Promise","resolve","setTimeout","runPromisesInSeries","ps","reduce","p","next","then","getFileName","name","nameArray","split","pop","join","clamp","num","a","b","Math","max","min","ArtplayerToolThumbnail","option","processing","setup","Object","assign","DEFAULTS","video","creatVideo","duration","inputChange","bind","ondrop","fileInput","addEventListener","ondragover","event","preventDefault","file","dataTransfer","files","loadVideo","number","width","height","column","errorHandle","Element","tagName","type","style","position","newFileInput","document","createElement","left","top","right","bottom","opacity","appendChild","forEach","item","target","value","canPlayType","videoUrl","URL","createObjectURL","emit","src","start","begin","end","density","screenshotDate","creatScreenshotDate","canvas","creatCanvas","context2D","getContext","promiseList","map","index","oncanplay","drawImage","x","y","toBlob","blob","thumbnailUrl","revokeObjectURL","currentTime","time","catch","err","message","timeGap","timePoints","length","last","push","floor","ceil","fillStyle","fillRect","font","fillText","elink","download","href","body","click","removeChild","condition","msg","Error","removeEventListener","NaN","muted","controls","Emitter"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"artplayer-tool-thumbnail.js","sources":["../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/classCallCheck.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/createClass.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/inherits.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/typeof.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/possibleConstructorReturn.js","../../node_modules/_@babel_runtime@7.16.3@@babel/runtime/helpers/esm/getPrototypeOf.js","../../packages/artplayer-tool-thumbnail/node_modules/tiny-emitter/index.js","../../packages/artplayer-tool-thumbnail/src/utils.js","../../packages/artplayer-tool-thumbnail/src/index.js"],"sourcesContent":["export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}","import _typeof from \"@babel/runtime/helpers/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n\n return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","export function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function runPromisesInSeries(ps) {\n return ps.reduce((p, next) => p.then(next), Promise.resolve());\n}\n\nexport function getFileName(name) {\n const nameArray = name.split('.');\n nameArray.pop();\n return nameArray.join('.');\n}\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}","import Emitter from 'tiny-emitter';\nimport { runPromisesInSeries, sleep, getFileName, clamp } from './utils';\n\nclass ArtplayerToolThumbnail extends Emitter {\n constructor(option = {}) {\n super();\n this.processing = false;\n this.option = {};\n this.setup(Object.assign({}, ArtplayerToolThumbnail.DEFAULTS, option));\n this.video = ArtplayerToolThumbnail.creatVideo();\n this.duration = 0;\n this.inputChange = this.inputChange.bind(this);\n this.ondrop = this.ondrop.bind(this);\n this.option.fileInput.addEventListener('change', this.inputChange);\n this.option.fileInput.addEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.addEventListener('drop', ArtplayerToolThumbnail.ondrop);\n }\n\n static get DEFAULTS() {\n return {\n number: 60,\n width: 160,\n height: 90,\n column: 10,\n begin: 0,\n end: NaN,\n };\n }\n\n static ondragover(event) {\n event.preventDefault();\n }\n\n ondrop(event) {\n event.preventDefault();\n const file = event.dataTransfer.files[0];\n this.loadVideo(file);\n }\n\n setup(option = {}) {\n this.option = Object.assign({}, this.option, option);\n const { fileInput, number, width, column } = this.option;\n\n this.errorHandle(fileInput instanceof Element, \"The 'fileInput' is not a Element\");\n\n if (!(fileInput.tagName === 'INPUT' && fileInput.type === 'file')) {\n fileInput.style.position = 'relative';\n const newFileInput = document.createElement('input');\n newFileInput.type = 'file';\n newFileInput.style.position = 'absolute';\n newFileInput.style.width = '100%';\n newFileInput.style.height = '100%';\n newFileInput.style.left = '0';\n newFileInput.style.top = '0';\n newFileInput.style.right = '0';\n newFileInput.style.bottom = '0';\n newFileInput.style.opacity = '0';\n fileInput.appendChild(newFileInput);\n this.option.fileInput = newFileInput;\n }\n\n ['number', 'width', 'column', 'begin', 'end'].forEach((item) => {\n this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`);\n });\n\n this.option.number = clamp(number, 10, 1000);\n this.option.width = clamp(width, 10, 1000);\n this.option.column = clamp(column, 1, 1000);\n return this;\n }\n\n static creatVideo() {\n const video = document.createElement('video');\n video.style.position = 'absolute';\n video.style.top = '-9999px';\n video.style.left = '-9999px';\n video.muted = true;\n video.controls = true;\n document.body.appendChild(video);\n return video;\n }\n\n inputChange(event) {\n const file = this.option.fileInput.files[0];\n this.loadVideo(file);\n event.target.value = '';\n }\n\n loadVideo(file) {\n if (file) {\n const canPlayType = this.video.canPlayType(file.type);\n this.errorHandle(\n canPlayType === 'maybe' || canPlayType === 'probably',\n `Playback of this file format is not supported: ${file.type}`,\n );\n const videoUrl = URL.createObjectURL(file);\n this.videoUrl = videoUrl;\n this.file = file;\n this.emit('file', this.file);\n this.video.src = videoUrl;\n this.emit('video', this.video);\n }\n }\n\n start() {\n if (!this.video.duration) return sleep(1000).then(() => this.start());\n const { width, number, begin, end } = this.option;\n const height = (this.video.videoHeight / this.video.videoWidth) * width;\n this.option.height = height;\n this.option.begin = clamp(begin, 0, this.video.duration);\n this.option.end = clamp(end || this.video.duration, begin, this.video.duration);\n this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`);\n this.duration = this.option.end - this.option.begin;\n this.density = number / this.duration;\n this.errorHandle(this.file && this.video, 'Please select the video file first');\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n this.errorHandle(this.density <= 1, `The preview density cannot be greater than 1, but got ${this.density}`);\n const screenshotDate = this.creatScreenshotDate();\n const canvas = this.creatCanvas();\n const context2D = canvas.getContext('2d');\n this.emit('canvas', canvas);\n const promiseList = screenshotDate.map((item, index) => () => {\n return new Promise((resolve) => {\n this.video.oncanplay = () => {\n context2D.drawImage(this.video, item.x, item.y, width, height);\n canvas.toBlob((blob) => {\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.thumbnailUrl = URL.createObjectURL(blob);\n this.emit('update', this.thumbnailUrl, (index + 1) / number);\n this.video.oncanplay = null;\n resolve();\n });\n };\n this.video.currentTime = item.time;\n });\n });\n this.processing = true;\n return runPromisesInSeries(promiseList)\n .then(() => {\n this.processing = false;\n this.emit('done');\n })\n .catch((err) => {\n this.processing = false;\n this.emit('error', err.message);\n throw err;\n });\n }\n\n creatScreenshotDate() {\n const { number, width, height, column, begin } = this.option;\n const timeGap = this.duration / number;\n const timePoints = [begin + timeGap];\n while (timePoints.length < number) {\n const last = timePoints[timePoints.length - 1];\n timePoints.push(last + timeGap);\n }\n return timePoints.map((item, index) => ({\n time: item - timeGap / 2,\n x: (index % column) * width,\n y: Math.floor(index / column) * height,\n }));\n }\n\n creatCanvas() {\n const { number, width, height, column } = this.option;\n const canvas = document.createElement('canvas');\n const context2D = canvas.getContext('2d');\n canvas.width = width * column;\n canvas.height = Math.ceil(number / column) * height + 30;\n context2D.fillStyle = 'black';\n context2D.fillRect(0, 0, canvas.width, canvas.height);\n context2D.font = '14px Georgia';\n context2D.fillStyle = '#fff';\n context2D.fillText(\n `From: https://artplayer.org/, Number: ${number}, Width: ${width}, Height: ${height}, Column: ${column}`,\n 10,\n canvas.height - 11,\n );\n return canvas;\n }\n\n download() {\n this.errorHandle(\n this.file && this.thumbnailUrl,\n 'Download does not seem to be ready, please create preview first',\n );\n this.errorHandle(!this.processing, 'There is currently a task in progress, please wait a moment...');\n const elink = document.createElement('a');\n const name = `${getFileName(this.file.name)}.png`;\n elink.download = name;\n elink.href = this.thumbnailUrl;\n document.body.appendChild(elink);\n elink.click();\n document.body.removeChild(elink);\n this.emit('download', name);\n return this;\n }\n\n errorHandle(condition, msg) {\n if (!condition) {\n this.emit('error', msg);\n throw new Error(msg);\n }\n }\n\n destroy() {\n this.option.fileInput.removeEventListener('change', this.inputChange);\n this.option.fileInput.removeEventListener('dragover', ArtplayerToolThumbnail.ondragover);\n this.option.fileInput.removeEventListener('drop', ArtplayerToolThumbnail.ondrop);\n document.body.removeChild(this.video);\n if (this.videoUrl) {\n URL.revokeObjectURL(this.videoUrl);\n }\n if (this.thumbnailUrl) {\n URL.revokeObjectURL(this.thumbnailUrl);\n }\n this.emit('destroy');\n }\n}\n\nexport default ArtplayerToolThumbnail;\n"],"names":["setPrototypeOf","assertThisInitialized","tinyEmitterModule","sleep","ms","Promise","resolve","setTimeout","runPromisesInSeries","ps","reduce","p","next","then","getFileName","name","nameArray","split","pop","join","clamp","num","a","b","Math","max","min","ArtplayerToolThumbnail","option","processing","setup","Object","assign","DEFAULTS","video","creatVideo","duration","inputChange","bind","ondrop","fileInput","addEventListener","ondragover","event","preventDefault","file","dataTransfer","files","loadVideo","number","width","column","errorHandle","Element","tagName","type","style","position","newFileInput","document","createElement","height","left","top","right","bottom","opacity","appendChild","forEach","item","target","value","canPlayType","videoUrl","URL","createObjectURL","emit","src","start","begin","end","videoHeight","videoWidth","density","screenshotDate","creatScreenshotDate","canvas","creatCanvas","context2D","getContext","promiseList","map","index","oncanplay","drawImage","x","y","toBlob","blob","thumbnailUrl","revokeObjectURL","currentTime","time","catch","err","message","timeGap","timePoints","length","last","push","floor","ceil","fillStyle","fillRect","font","fillText","elink","download","href","body","click","removeChild","condition","msg","Error","removeEventListener","NaN","muted","controls","Emitter"],"mappings":"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"} \ No newline at end of file diff --git a/packages/artplayer-tool-thumbnail/src/index.js b/packages/artplayer-tool-thumbnail/src/index.js index f0fe01c39..42da0b586 100644 --- a/packages/artplayer-tool-thumbnail/src/index.js +++ b/packages/artplayer-tool-thumbnail/src/index.js @@ -39,7 +39,7 @@ class ArtplayerToolThumbnail extends Emitter { setup(option = {}) { this.option = Object.assign({}, this.option, option); - const { fileInput, number, width, height, column } = this.option; + const { fileInput, number, width, column } = this.option; this.errorHandle(fileInput instanceof Element, "The 'fileInput' is not a Element"); @@ -59,13 +59,12 @@ class ArtplayerToolThumbnail extends Emitter { this.option.fileInput = newFileInput; } - ['number', 'width', 'height', 'column', 'begin', 'end'].forEach((item) => { + ['number', 'width', 'column', 'begin', 'end'].forEach((item) => { this.errorHandle(typeof this.option[item] === 'number', `The '${item}' is not a number`); }); this.option.number = clamp(number, 10, 1000); this.option.width = clamp(width, 10, 1000); - this.option.height = clamp(height, 10, 1000); this.option.column = clamp(column, 1, 1000); return this; } @@ -105,7 +104,9 @@ class ArtplayerToolThumbnail extends Emitter { start() { if (!this.video.duration) return sleep(1000).then(() => this.start()); - const { width, height, number, begin, end } = this.option; + const { width, number, begin, end } = this.option; + const height = (this.video.videoHeight / this.video.videoWidth) * width; + this.option.height = height; this.option.begin = clamp(begin, 0, this.video.duration); this.option.end = clamp(end || this.video.duration, begin, this.video.duration); this.errorHandle(this.option.end > this.option.begin, `End time must be greater than the start time`);