HTML5画布框架fabricjs学习笔记(二)——图片与背景

2023-11-01 01:20

本文主要是介绍HTML5画布框架fabricjs学习笔记(二)——图片与背景,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 前言
  • 图片(fabric.Image)
    • 代码
    • 代码说明
    • 结果
  • 背景
    • 纯色背景
      • 代码
      • 代码说明
      • 结果
    • 图片背景
      • 代码
      • 代码说明
      • 结果
  • 总览
  • 系列博文
  • 后记

前言

这篇博文是《HTML5画布框架fabricjs学习笔记》系列博文的第二篇——图片与背景,主要介绍如何在画布中添加图片对象、图片背景及纯色背景。

框架介绍、引入及索引部分见《HTML5画布框架fabricjs学习笔记(一)——引入》


图片(fabric.Image)

图片使用fabric.Image类来定义,基础的构造器如下:

    /*** Constructor* Image can be initialized with any canvas drawable or a string.* The string should be a url and will be loaded as an image.* @param {HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String} element Image element* @param {Object} [options] Options object*/initialize: function(element, options) {...}

需要传入两个参数:

  1. element:可传入的类型是HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String,传入String时,其必须是图片的URL。
  2. option:初始的一些属性,如topleftstroke

但一般情况下,不会使用这种加载方式,原因如下:

  1. 同步的图片加载方式会导致画布加载时出现卡顿的问题,当图片较大时该情况更加明显。
  2. 除了需要在画布中绘制固定的图片外,大部分图片都存储在服务器中,需要先下载再显示在画布中。

异步加载图片
综上,异步加载是性能更好,更优雅的做法。这里我们使用fabric.Image.fromURL方法,其源码如下:

  /*** Creates an instance of fabric.Image from an URL string* @static* @param {String} url URL to create an image from* @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument). Second argument is a boolean indicating if an error occurred or not.* @param {Object} [imgOptions] Options object*/fabric.Image.fromURL = function(url, callback, imgOptions) {fabric.util.loadImage(url, function(img, isError) {callback && callback(new fabric.Image(img, imgOptions), isError);}, null, imgOptions && imgOptions.crossOrigin);};

需要传入三个参数:

  1. url:图片资源的URL。
  2. callback:异步方法的回调方法,当加载图片资源完成时会调用该方法。从源码第二行中可以看到,我们的callback方法需要接受两个参数:
    a. 一个创建好的fabric.Image对象
    b. isError:加载图片过程中是否发生了错误。
  3. imgOptions:同前文中的option类似。

代码

    // 图片下载链接省略const imageURL = "...";// 回调方法let callback = (image, isError) => {if (!isError) {canvas.add(image);}};// 属性const properties = {left: 45,top: 45};fabric.Image.fromURL(imageURL, callback, properties);

代码说明

  1. 图片的URL可以是下载URL,也可以是DataURL(形如data:image/gif;base64,......)。此处是随便找的一个黄脸表情的URL,侵删。
  2. 回调方法,即图片加载成功或失败时会被调用的代码,可以分别做成功和失败时的处理逻辑。例如我们这里做的逻辑就是成功时将图片对象添加到画布中。

结果

请添加图片描述


背景

该框架中,我们可以设置纯色背景和图片背景。

纯色背景

纯色背景比较简单,只需传入一个颜色值,可选的格式有

  1. 'rgb(255, 0, 0)':rgb 10进制色彩
  2. 'rgba(0, 255, 0, 0.6)':带透明度的rgb色彩,即rgba
  3. #11D2F0:16进制色彩
  4. lightblue:颜色单词

代码

  const color = "lightblue";canvas.setBackgroundColor(color);// 必须重新渲染画布,以显示新的背景canvas.renderAll();

代码说明

改变画布背景后需要调用canvas.renderAll()重新渲染画布,这样才可以看到画布的新背景,该方法以后会经常用到。

结果

请添加图片描述

图片背景

图片背景的加载方式与前文中的图片对象类似

代码

    // 图片下载链接省略const imageURL = "...";// 回调方法const callback = (image, isError) => {// 设置图片背景在水平方向上的缩放比例image.scaleX = canvas.width / image.width;// 设置图片背景在竖直方向上的缩放比例image.scaleY = canvas.height / image.height;canvas.setBackgroundImage(image);canvas.renderAll();};fabric.Image.fromURL(imageURL, callback);

代码说明

  1. 仍然使用fabric.Image.fromURL对图片进行异步加载,只是回调方法中的逻辑发生了变化。
  2. scaleXscaleY分别是水平方向和竖直方向上对图片背景的缩放比例。这里设置为将图片缩放到完全填充画布。如果不设置,由于图片远大于画布,画布中只显示图片左上角的一部分。

结果

请添加图片描述


总览

现在来看看这一节中,我们图片对象、纯色背景和图片背景
请添加图片描述

本节完整代码见CodeSandbox


系列博文

HTML5画布框架fabricjs学习笔记(一)——引入
HTML5画布框架fabricjs学习笔记(二)——图片与背景
HTML5画布框架fabricjs学习笔记(三)——自定义选择控制框样式

(以下博文创作中,敬请期待)
HTML5画布框架fabricjs学习笔记(四)——用户交互(上)


后记

本小节中介绍了在画布中添加图片对象、为画布添加设置纯色背景和图片背景的方法。

图片不同于其他对象,数据量比较大,可能动辄数MB,因此画布的序列化、存储等方面都需要做特殊的处理,具体的内容详见后续的章节。

这篇关于HTML5画布框架fabricjs学习笔记(二)——图片与背景的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/319480

相关文章

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h