美文网首页
fabric酷炫图片处理

fabric酷炫图片处理

作者: 小柠有点萌 | 来源:发表于2020-07-17 13:48 被阅读0次

顏色的偏差调整
调整色彩亮度和对比
负片、灰阶、杂讯等效果
去除背景
内建其它网美爱用滤镜 (?)
图片滤镜效果

Fabric 拥有强大的滤镜 api,且还能够支援 WebGL 来使用 GPU 资源

甚至还能够建立自己的滤镜效果呢!

fabric.Image.filters (Array)

最简单的使用方法就是修改 fabric.Image 中的 filters 属性,这是一个阵列,这个阵列裡面存放 Fabric 的 filter 物件实例,所以说这些效果还是能叠加的,只要我们把滤镜效果都装进这个阵列里头!

这边就简单的创建几种滤镜来玩看看效果吧!

灰阶效果

// 图片
const imgEl = document.createElement('img')
imgEl.crossOrigin = 'Anonymous' // 让图片能让所有人存取
imgEl.src = 'https://i.imgur.com/1k9XjUn.jpg'
imgEl.onload = () => {
  const image = new fabric.Image(imgEl, {
    scaleX: 0.5,
    scaleY: 0.5,
    angle: 15,
    top: 60,
    left: 300
  })
  // 将 filters 实例 push 进 filters 里头
  image.filters.push(new fabric.Image.filters.Grayscale())
  // 这边需要重整所有的滤镜效果
  image.applyFilters()
  canvas.add(image)
}

复制

image.png

我们就很轻鬆地帮照片加上灰阶效果囉!

负片效果

image.filters.push(new fabric.Image.filters.Invert())

复制

image.png

纯黑白

image.filters.push(new fabric.Image.filters.BlackWhite()) // 纯黑白

复制

image.png

復古

image.filters.push(new fabric.Image.filters.Sepia()) // 復古

复制

image.png

混和风格 纯黑白 + 復古

image.filters.push(new fabric.Image.filters.BlackWhite()) // 纯黑白
  image.filters.push(new fabric.Image.filters.Sepia()) // 復古

复制

image.png

模糊

需要传入物件提供 blur 数值

image.filters.push(new fabric.Image.filters.Blur({
    blur: 0.5
  })) // 模糊

复制

image.png

去背

去背需要提供色彩以及范围

image.filters.push(new fabric.Image.filters.RemoveColor({
  distance: 0.2,
  color: 'white'
})) // 去背

复制

image.png

可不只这些呦

Fabric 其实还提供了更多更有趣的内建滤镜让大家去使用,如果还有兴趣可以到

fabricjs filter demo - http://fabricjs.com/image-filters
fabric doc filters - http://fabricjs.com/docs/fabric.Image.filters.html
去玩更多滤镜效果呦
最后分享这边踩到的一些雷

cross-origin data

这边原本是想偷懒直接用 fabric.Image.FromURL 去直接使用 URL 建立一张图片的

// 使用 url 绘製图片
fabric.Image.fromURL('https://i.imgur.com/1k9XjUn.jpg', (img) => {
  const oImg = img.set({
      left: 300,
      top: 100,
      angle: 15,
      width: 500,
      height: 500
  })
  oImg.filters.push(new fabric.Image.filters.Grayscale())
  oImg.applyFilters()
  canvas.add(oImg) // 记得还是要加进 canvas 才会显示出来呦
})

复制


image.png

这边可以看到因為我们直接用 URL 去做载入图片,这边 fabric 底层应该是没有建立 标籤来储存图片,所以有同源的限制,这边解法是用另一种图片载入的方法

请参考 MDN - 同源政策 https://developer.mozilla.org/zh-TW/docs/Web/Security/Same-origin_policy
影像滤镜出来不完整

原因是一开始使用解析度过大图像 (3024*4032) ... 超大

[图片上传失败...(image-89dd01-1593932948377)]

[图片上传失败...(image-4486aa-1593932948378)]

这边是 Fabricjs 為了防止用户因使用过大的图片而造成无法处理所做的限制
可以透过操作 fabric.textureSize 去操控被限制的大小

相关文章

网友评论

      本文标题:fabric酷炫图片处理

      本文链接:https://www.haomeiwen.com/subject/pdevqktx.html