前段时间在github上有个能在浏览器扣图的js库蛮火https://github.com/imgly/background-removal-js
演示网站:demo
不仅仅能将人物主体扣出,还能处理动物、植物等
最近我萌发出在vue中运行这个库的想法,记录一下
下载、配置
首先当然是通过npm下载这个js库
1
| npm i @imgly/background-removal
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| <template> <div id="app"> <input type="file" @change="removeBackground" /> <div> <h2>抠图结果:</h2> <div v-if="loading"> 抠图中... </div> <div v-else> <img v-if="backgroundRemoved" :src="backgroundRemoved" /> </div> </div> </div> </template>
<script> import imglyRemoveBackground from "@imgly/background-removal";
export default { name: 'App', data() { return { uploadimg:false, backgroundRemoved: null, loading:false, } }, methods: { async removeBackground(event) { const file = event.target.files[0]; this.removeBackgorund(file) }, async removeBackgorund(temUrl){ this.loading = true; let config = { // publicPath: "/src/static/removeBk/",//将模型文件存入本地,直接从项目本地跑模型,省去了下载模型的时间 // fetchArgs: { // mode: "no-cors",//跨域问题 // }, progress: (key, current,total) => {//进度回调,目前只会返回加载模型的进度,处理图片的进度不会返回 // loading.value = !(key==='compute:inference' && current === 1) console.log(`下载中:${key}:${current} of ${total}`) }, } const blob = await imglyRemoveBackground(temUrl, config) console.log('blob',blob) this.backgroundRemoved = URL.createObjectURL(blob); this.loading = false; } }, } </script>
<style> #app { font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style>
|
然后就可以用了,,很方便
配置项
其中imglyRemoveBackground接收的第一个参数是本地图片地址,通过上传图片拿到bolb格式,将其传入,第二参数是配置项,目前全部的配置项有六个
1 2 3 4 5 6
| publicPath: //找本地模型文件所处位置,配置了可以直接从项目本地跑模型,省去了下载模型的时间; fetchArgs: boolean;//如果您遇到CORS问题,您可能希望通过fetch函数传递额外的参数。 progress: //进度回调函数,第一个参数是当前在处理什么,第二个是当前处理到多少,第三个是总大小; debug: boolean; // 启用或禁用有用的控制输出。 proxyToWorker: boolean; // 是否将计算代理给Web Worker进行处理。(默认为true) model: 'small' | 'medium'; // 使用的模型。(默认为“medium” 80m大小) small 40m大小
|
其中publicPath配置项加上抠图速度能提升不小,不加就是每次运行方法会下载抠图模型,加了后直接跑项目的模型,
将node_modules/@imgly/background-removal-data/dist下的模型文件复制到项目其他地方放置,可以减少去背景的时间,
但是报错,一直没成功,如果你们成功,告诉我一下怎么配置的
原文链接:https://blog.csdn.net/imsopoor/article/details/131577423