整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何在fabric.js中使用蒙版合成图片

 现在借助于Html5中Canvas可以实现在线对图片进行一些较复杂的编辑操作,如图片合成、裁剪、旋转、缩放、调整亮度、添加滤镜等等。但由于canvas原生api使用起来比较繁琐,特别是利用canvas对图片一些复杂的操作,如利用蒙版实现手机壳和图案在线合成并可调整图案大小及位置时,使用原生api的工作量非常大,且随着需求的调整、细化,代码会变得复杂且臃肿,难以维护,最终变成shit mountain堆在那里。

  当需要实现此类复杂的功能时,这就不得不借助于现成的canvas库了,比如fabric.js。fabric.js是一个功能强大且易用的Html5 Canvas js类库。使用fabric.js,我们可以轻松实现对图片进行在线合成、裁剪等复杂操作。

  本篇文章将介绍如何使用fabric.js实现带蒙版图片合成及调整、导出等。

  1. 安装并在js中引入fabric
//模块项目
npm install fabric --save
import { fabric } from "fabric"
//非模块化项目
<script src="fabric.js"></script>
  1. 在html中新建一个canvas标签
<canvas id="c" ></canvas>
  1. 初始化canvas
let id = 'c';
let canvas = new fabric.Canvas(id, {
    backgroundColor: '#fff',//背景色,默认透明背景
    width: 800,//canvas画布宽度
    height: 800//画布高度
})
  1. 添加背景图片
fabric.Image.fromURL(图片的URL, (img) => {
    img.scaleToHeight(800);//图片缩放到画布高度
    canvas.add(img);
    canvas.sendToBack(img);//放在最底层
    //也可以直接使用canvas.setBackgroundImage方法直接设置背景图片
}, {
    //也可以在回调里使用.set方法设置各个属性值
    crossOrigin: "anonymous",//跨域时需要加上
    selectable: false,
    left: 800 / 2, //显示在画布中间
    top: 800 / 2,
    originX: 'center',//横坐标原点位置
    originY: 'center',//纵坐标原点位置
});

注意: 要需要在回调函数里按实际宽或高度设置图片宽度或高度显示比例,img.scaleToHeight(800)


  1. 加载蒙版及图案
//先加载蒙版
fabric.Image.fromURL(蒙版url, (mask) => {
    mask.scaleToHeight(800);
    //加载图案
    fabric.Image.fromURL(图案url, (img) => {
        img.scaleToHeight(800);
        canvas.add(img);
    }, {
        crossOrigin: "anonymous",
        left: 400,
        top: 400,
        originX: 'center',
        originY: 'center',
        selectable: false,
        borderColor: "#0091FF", //选中时边框颜色
        borderScaleFactor: 2, //边框比例因子
        cornerSize: 8,//边框控制角大小
        padding: 0,
        cornerColor: "#0091FF",
        clipPath: mask,//指定蒙版图片
    });
}, {
    crossOrigin: "anonymous",
    absolutePositioned: true,//根据实际设置,为true时固定显示,不随图案移动而移动
    left: 400,//指定蒙版显示大小
    top: 400,
    originX: 'center',
    originY: 'center',
});

  1. 启用编辑
    设置图案图片的selectable属性为true,并设置图片对象为活动状态
img.set("selectable", true);
canvas.setActiveObject(img);
canvas.requestRenderAll();

  1. 保存编辑后的图案
    保存可以直接导出为图片,也可以导出为json
//导出为json
let json = canvas.toJSON();
//将json保存到后台服务器,可以根据json对图片再次编辑,json中包含了调整后图片的高度、宽度、角度等信息

//导出为base64图片
let imgBase64 = canvas.toDataURL({
    format:'png',
    multiplier: 2,//根据实际需要设置导出图片与当前canvas的比例,比例越大,导出图片的分辨率越高
});
  1. 对编辑过的图案再次编辑
    初始化canvas后,通过loadFromJSON加载图片,这样加载出来的图片是我们上次编辑后的图片,可以对其继续调整。
canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));

问题
  尽管fabric.js功能已经很强大,api也比较完善,结合官网文档可以快速实现我们的需求,但有一些细节问题需要我们去踩坑、去总结,比如:

  1. 加载json后图片位置大小等与上次我们编辑完保存的有些许差异,这是因为导出的json中的left、top、angle、scaleX、scaleY等只保留到小数点后两位,这样当我们的图片分辨率比较高时,差距尤其明显,解决此问题只需导出时指定我们需要保留的属性即可
let json = canvas.toJSON(['crossOrigin', 'selectable','angle', 'left', 'right', 'scaleX', 'scaleY']);
  1. 加载蒙版时别忘了指定蒙版图片属性的absolutePositioned为true(根据实际需要设置)
  2. 在vue等框架中通过条件渲染或列表渲染时需对canvas择机初始化,否则会找不到canvas元素导致初始化失败

大家分享最新版本的亮度蒙版插件TKActions V7 for Mac,适用于多个版本的Photoshop,TKActions v7汉化版中包含RapidMask、Combo、Cx和Batch四个插件,功能各异,tkactions v7插件可以根据图片亮度的不同,对不同的区域进行单独的调节,有助于用户进行后期优化,还在找TK亮度蒙版插件的朋友可以试试哦!

TKActions V7 for Mac官方介绍

TKActions V7是用于制作光度掩模和运行Photoshop的综合面板的最新版本。它包括以前V6面板的所有功能以及许多新功能。与其前身一样,TK7面板是模块化的,因此用户可以在工作空间中以最佳方式配置它。Combo模块甚至有两种不同的安排,如果需要,可以采用新的紧凑布局。TK面板在全球范围内使用,并预先编程了六种常用语言:英语,西班牙语,德语,法语,意大利语和中文。用户可以选择他们喜欢的语言。

RapidMask模块使用独特的快速蒙版引擎,以接近实时的速度快速生成光度掩模和其他基于像素的掩模的整个光谱。基于掩码的界面计算16位掩码,用户可以预先看到这些掩码,以便明智地选择使用哪一个。界面采用自上而下的工作流程,可以快速轻松地创建蒙版。编号部分指导用户完成整个过程。有几种修改选项,包括掩模计算器,允许所有掩模,甚至修改的掩模,以独特的方式组合。

https://mac.orsoon.com/Mac/171139.html

TKActions V7简化而高效。大多数用户只需要两个V6模块(RapidMask加上Combo或Cx)来完成所有工作。除了主界面之外,还有一些逻辑子菜单可以轻松访问,并且在不再需要时会自动关闭。将鼠标滚动到下面的图像上会显示这些模块中可用的更多基础菜单。

TKActions亮度蒙版插件功能特色

TKActions V7面板专为Photoshop CC设计,可充分利用Photoshop CC可容纳的HTML5架构。以下是每个模块的一些功能。

RapidMask

多个面罩/多个来源 - TK7面板不仅仅是一个发光面罩。创建通道,颜色,饱和度和振动掩模与光度掩模一样容易,并且可以生成这些基于像素的自羽化掩模的整个光谱。SOURCE菜单可以轻松选择不同的像素数据作为制作蒙版的起点

有组织的工作流程 - 四个不同的部分 - SOURCE,MASK,MODIFY和OUTPUT--引导用户完成蒙版制作过程。

新面具 -TK7现在具有Color Zone蒙版和CMYK蒙版。

轻松添加和减去蒙版 - 蒙版计算器提供了一种简单的方法来添加,减去或交叉面板创建的任何蒙版。

更多MODIFY选项 - 新的修改功能允许通过绘画,刻录,闪避甚至Photoshop的Camera Raw滤镜实现精确蒙版。

多种输出选项 -使用当前的快速蒙版作为图层蒙版,轻松创建调整图层和像素图层。

图层蒙版模式 - 提供基于图像的方法,通过将蒙版直接应用为活动图层上的图层蒙版,快速选择或创建最佳蒙版。

强调色界面 - 整个模块只有一种强调色,用户可以根据自己的喜好进行更改。

点击跟踪 -按钮在点击后保留一个强调色的阴影,这样用户就可以跟踪他们上次选择的面具。

Combo/Cx

紧凑的设计 - 将Photoshop控件,网页锐化和创意操作集成到一个模块中。

从模块运行Photoshop -可以通过单击模块单击按钮运行许多常用的Photoshop功能,键盘快捷键和菜单项。

静音颜色界面 -将按钮分隔为逻辑组,以便快速找到正确的Photoshop功能。

多功能按钮 - 几个按钮具有双重功能,可以通过按钮本身以图形方式显示,也可以使用CTRL /命令键激活。

使用“TK▶”按钮访问创意Photoshop操作菜单 - 包括新操作手绘晕影,聚光灯,Dehaze和添加颜色。

曝光混合操作 -Stack,Align和Focus Blend是“TK▶”按钮的一部分。

集成的网络锐化 -TK7现在提供多维支持。将Web图像锐化为任何维度,转换为sRGB,并运行锐化后操作。

扩展用户操作 -通过“用户▶”按钮访问的可编程操作允许用户直接从面板运行自己的操作。

Batch

多图像锐化 -只需单击一下按钮,即可为网络调整和锐化图像的整个文件夹。

多维锐化 -TK7现在允许不同的垂直和水平尺寸,可以组合包含需要以不同方式调整大小的垂直和水平图像的文件夹。

所有模块

活动选择指示器 - 即使没有可见的行进蚂蚁,也会显示活动选择。

滚动帮助 - 按住ALT /选项键并滚动按钮会在模块的顶部或底部显示帮助消息。

TML5技术已经越来越被我们所接受,特别是一些3D的动画特效。本文介绍的8个HTML5 3D动画并没有特别华丽的界面,但是比较实用,涉及到3D图片、3D图表、3D按钮等方面,一起来看看。

1、HTML5 3D动画柱形图表

这次我们要来分享一款效果非常酷的HTML5 3D柱形图表,这款HTML5图表和之前分享的都不一样,主要是外观上比较吸引人,首先图表是3D立体的,有一种非常棒的视觉效果;其次,当鼠标划过柱形图表时,会有很不错的HTML5动画效果。




2、HTML5 3D 粒子波浪动画特效

今天我们分享一款升级版HTML5 3D粒子波浪动画特效,我们可以旋转不同的视角来欣赏粒子波浪的滚动特效。HTML5在动画制作方面的确让人眼前一亮。




3、HTML5自定义文字背景生成QQ签名档

这是一款利用HTML5实现的自定义文字背景应用,首先我们可以输入需要显示的文字,并且为该文字选择一张背景图片,背景图片就像蒙版一样覆盖在文字上。点击生成QQ签名档即可将文字背景融为一体生成另外一张图片,你也可以下载这张拥有你QQ签名档的图片。




4、HTML5坦克大战游戏简化版

今天分享的是一款简化版的HTML5坦克大战游戏,方向键控制坦克的行进方向,空格键发射子弹,命中敌方坦克后也会发出声音,效果还算可以。




5、HTML5 3D阴影文字特效

今天我们要来分享一款非常简单大气的HTML5 3D文字特效,这个3D文字特效是通过文字加粗以及文字阴影来实现的,效果非常不错。同时我们在html5tricks网站上也分享过很多炫酷的文字特效,比如CSS3文字阴影效果 阴影角度可随鼠标变化、动感的CSS3 Loading文字特效。




6、HTML5 3D衣服摆动特效 超酷HTML5 3D动画

今天向大家分享一款HTML5 3D衣服摆动动画特效,动画也是在HTML5 Canvas上完成,它模拟衣服晾在绳子上,点击鼠标可以让衣服摆动起来,就行风吹动它一样,非常逼真炫酷。




7、HTML5/CSS3一组可爱的3D按钮

这是一款利用HTML5和CSS3制作而成的按钮组合,这款CSS按钮非常具有个性化。该CSS3按钮不仅具有3D的外观,点击按钮也具有非常立体的效果,更具有特点的是这款CSS3按钮的形状是不规则的,而且按钮中都有一个可爱的小图标。




8、HTML5 Canvas 3D折线图表应用

今天我们再来讨论一下关于HTML5图表应用的问题,这款HTML5图表是基于canvas的3D折线图表,图表在初始化的时候会根据数据点把折线分割成多条线段,然后线段将逐渐悬浮到数据点对应数值的位置。由于是3D的效果,所以图表的折线也和其他折线图表的不同。




以上就是8个经典的HTML5 3D动画赏析,希望大家喜欢。