HTMLCanvasElement.toDataURL()

2023-11-02

HTMLCanvasElement.toDataURL() 方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。图片的分辨率为96dpi。

  • 如果画布的高度或宽度是0,那么会返回字符串“data:,”。
  • 如果传入的类型非“image/png”,但是返回的值以“data:image/png”开头,那么该传入的类型是不支持的。
  • Chrome支持“image/webp”类型。

语法EDIT

canvas.toDataURL(type, encoderOptions);

参数

type  可选
图片格式,默认为  image/png
encoderOptions  可选
图片质量。取值范围为  0 到  1 。如果指定图片格式为  image/jpeg 或  image/webp。如果超出取值范围,将会使用默认值  0.92。其他参数会被忽略。

返回值

包含 data URI 的DOMString

示例

有如下<canvas>元素

<canvas id="canvas" width="5" height="5"></canvas>

可以用这样的方式获取一个 data-URL

var canvas = document.getElementById("canvas");
var dataURL = canvas.toDataURL();
console.log(dataURL);
// "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby
// blAAAADElEQVQImWNgoBMAAABpAAFEI8ARAAAAAElFTkSuQmCC"

设置jpegs图片的质量

var fullQuality = canvas.toDataURL("image/jpeg", 1.0);
// data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...9oADAMBAAIRAxEAPwD/AD/6AP/Z"
var mediumQuality = canvas.toDataURL("image/jpeg", 0.5);
var lowQuality = canvas.toDataURL("image/jpeg", 0.1);

示例:动态更改图片

可以使用鼠标事件来动态改变图片(这个例子中改变图片灰度)。

HTML

<img class="grayscale" src="myPicture.png" alt="Description of my picture" />
window.addEventListener("load", removeColors);

function showColorImg() {
  this.style.display = "none";
  this.nextSibling.style.display = "inline";
}

function showGrayImg() {
  this.previousSibling.style.display = "inline";
  this.style.display = "none";
}

function removeColors() {
  var aImages = document.getElementsByClassName("grayscale"),
      nImgsLen = aImages.length,
      oCanvas = document.createElement("canvas"),
      oCtx = oCanvas.getContext("2d");
  for (var nWidth, nHeight, oImgData, oGrayImg, nPixel, aPix, nPixLen, nImgId = 0; nImgId < nImgsLen; nImgId++) {
    oColorImg = aImages[nImgId];
    nWidth = oColorImg.offsetWidth;
    nHeight = oColorImg.offsetHeight;
    oCanvas.width = nWidth;
    oCanvas.height = nHeight;
    oCtx.drawImage(oColorImg, 0, 0);
    oImgData = oCtx.getImageData(0, 0, nWidth, nHeight);
    aPix = oImgData.data;
    nPixLen = aPix.length;
    for (nPixel = 0; nPixel < nPixLen; nPixel += 4) {
      aPix[nPixel + 2] = aPix[nPixel + 1] = aPix[nPixel] = (aPix[nPixel] + aPix[nPixel + 1] + aPix[nPixel + 2]) / 3;
    }
    oCtx.putImageData(oImgData, 0, 0);
    oGrayImg = new Image();
    oGrayImg.src = oCanvas.toDataURL();
    oGrayImg.onmouseover = showColorImg;
    oColorImg.onmouseout = showGrayImg;
    oCtx.clearRect(0, 0, nWidth, nHeight);
    oColorImg.style.display = "none";
    oColorImg.parentNode.insertBefore(oGrayImg, oColorImg);
  }
}

 

转载于:https://www.cnblogs.com/cangqinglang/p/10002179.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTMLCanvasElement.toDataURL() 的相关文章

  • 线程问题的核心: 怎么退出线程才是合适的----小话多线程(2)

    作者 陈曦 日期 2012 8 5 16 13 36 环境 Mac 10 7 1 Lion Intel i3 支持64位指令 gcc4 2 1 xcode4 2 苹果开源代码Libc 763 11 转载请注明出处 每日总结 优秀的架构都是类
  • 网络体系结构

    网络体系结构概述 1 网络协议 网络协议的三要素 语义 语法和同步 语法 规定通信双方彼此应该如何操作 即确定协议元素的格式 如 数据格式 信号平等规定 语义 规定通信双方要发出的控制信息 执行的动作和返回的应答等 包括用于调整和运行差错处
  • 云计算之k8s系列_第十二回

    上一回讲解了控制器 这一回详细看看控制器中Deployment控制器 k8s中 Deployment实现了一个非常重要的功能 pod的水平扩展与收缩 如果我们更新了Deployment的pod模板 那么deployment就需要 滚动更新
  • c# ??=

    空合并运算符 用于定义引用类型和可空类型的默认值 如果此运算符的左操作符不为Null 则此操作符返回左操作数 否则返回右操作数 例如 当a不为空时返回a 为null时返回b var c a b 空合并赋值运算符 C 8 0 及更高版本中可使
  • linux和Ubuntu如何创建共享文件夹

    1 打开虚拟机界面 并启动linux 2 选中上方功能栏中的虚拟机 选中设置 3 点击CD DVD SATA 看到右边有一个使用IOS镜像文件 4 路径填写安装这个虚拟机用的镜像文件路径 5 然后在选项里选择共享文件夹 右边选择总是启用 添
  • Bean拷贝组件(注解驱动)方案设计与落地

    一 背景 数据流转在各层之间的过程 应当是改头换面的 字段属性数量 属性名称 一般不变 但也有重构时出现变化的情况 类型名称 普遍变化例如BO VO DTO 对于转换的业务对象 原始的做法时直接实例采用Getter与Setter方法进行逐一
  • OpenMv+HC-SR04超声波测距(中断)

    新版HC SR04 性能远超老版HC SR04 US 015 在测距精度高于老版HC SR04和US 015的情况下 测距范围更远 可达6米 远超一般超声波测距模块 采用CS 100A超声波测距SOC芯片 高性能 工业级 宽电压 低价格 成
  • Jupyter中通过pyspark连接Hive数据库

    环境 CentOS 7 Hive 2 3 6 Spark 2 3 0 Jupyter hub 1 1 0 notebook lab通用 Python 3 7 准备 Spark Hive已安装完成 Jupyter 通过Anaconda 安装完
  • 角谷猜想(Collatz conjecture)--用 python 语言实现

    老师布置的一个小作业 用python代码实现角谷猜想 下面就给大家提供一个思路 供大家参考 角谷猜想 n 是一个自然数 如果 n 是奇数 则 n 3 n 1 如果 n 是偶数 则 n n 2 当 n 1 时输出整个计算过程的序列 如当 n
  • linux 内核 发送数据,linux 内核tcp数据发送的实现

    在分析之前先来看下SO RCVTIMEO和SO SNDTIMEO套接口吧 前面分析代码时没太注意这两个 这里算是个补充 SO RCVTIMEO和SO SNDTIMEO套接口选项可以给套接口的读和写 来设置超时时间 在unix网络编程中 说是
  • Docker: 容器如何访问windows宿主机中的服务,在容器中访问宿主机部署的服务,在容器中ping到宿主机

    一 使用背景 1 项目中使用到srs作为流媒体服务器 2 测试阶段时 将srs部署在windows10中 3 需要对推流拉流做认证操作 二 查看windows的hosts文件 C Windows System32 drivers etc h
  • 338. Counting Bits

    class Solution public vector
  • 接口和抽象类的异同点

    相同点 1 抽象类和接口都不能直接实例化 创建对象 2 抽象类的子类 或接口的实现类 都必须实现抽象类 或接口 中全部的抽象方法 才可以被实例化 否则 该类仍然为抽象类 不同点 1 关键字不同 抽象类子类使用extends关键字来继承抽象类
  • Qt的KeyEvent捕获Ctrl+C等快捷键/热键

    1 必须设置widget可以拥有焦点 注意 默认的focusPolicy是NoFocus 这会导致无法捕获Ctrl Alt Shfit 之外的字符按键 setFocusPolicy Qt StrongFocus 窗口将通过鼠标点击 按tab
  • 迪杰特斯拉算法-最短路径问题(浙大计算机机试题)

    今天写了一道可以用迪杰特斯拉算法实现的题目 题目如下 给你n个点 m条无向边 每条边都有长度d和花费p 给你起点s终点t 要求输出起点到终点的最短距离及其花费 如果最短距离有多条路线 则输出花费最少的 写的代码如下 但是一直不通过 incl
  • (二)用多线程管理TCP多个客户端连接服务器

    该程序的服务端大概工作逻辑如左图 首先说说这个程序的作用 这个程序可用于多个客户端通过连接服务器来互相通信 如qq群聊 当一个客户端有信息发过来后 服务端就会通过客户端队列转发给其他客户端 先上代码 TCP服务端 include myhea
  • GIT学习资料

    Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四 服务器上的Git Git详解之五 分布式Git Git详解之六 Git工具 Git详解之七 自定义Git Git详解之八 Git与其他系统
  • C++并发编程框架Theron(5)——File reader(1)

    1 前言 在上一篇博文 我主要通过Hello world 的示例 介绍了actors frameworks messages和receivers几个构建Theron框架程序的要点 但是Hello world 实例只是一个再简单不过的单act
  • 关于android studio 出现Error:Execution failed for task ':app:preDebugAndroidTestBuild'. 的解决办法

    前段时间打开Android studio 在build过程中总会出现以下错误 Error Execution failed for task app preDebugAndroidTestBuild gt Conflict with dep
  • Windows认证原理解析基础入门

    0x01 前言简介 0x02 基本介绍 1 本地登录认证 2 网络登录认证 0x03 LM NTLM 版本优缺 0x04 LM NTLM 生成原理 1 LM Hashes 生成实例 2 NTLM Hashes 生成实例 0x05 LM NT

随机推荐

  • 文件读取-python与java对比

    最近开始接触python 发现python的语法真的是简单 下面是读取文件的实例对比 Java package com ztesoft oss iominterface httpServlet toIOM import java io Bu
  • 高仿钉钉和小米的日历控件,很实用

    http mp weixin qq com s cWD7ex7WVT8bzQpxFHmCyA ref myread
  • mysql sum 重复计算_mysql join sum时数据重复问题及解决方案

    当我们使用mysql的join功能从多张表中取出数据并使用sum分别对取出的数据求和时 会发现sum出来的值是不对的 往往是正确值的整数倍 为什么会出现这样的情况呢 复现 假设有两张表 user buy 和user sell 分别记录了用户
  • 基于Qt的智能车载系统嵌入式项目(正点原子IMX6ULL开发板)

    基于正点原子的IMX6ULL开发板的智能车载系统 Qt 提示 该项目借鉴了不少大佬的代码 我没有自己造轮子 代码在文章末尾 同时附上参考链接 本人其他项目链接基于linux的智能仓储项目 基于Qt的人脸识别 基于STM32的智能家居 移植人
  • Kali 2 Kali 2018更新源

    这个源指的是软件源 也就是说你用apt get install xxx安装软件时 系统下载软件的地方 一般默认为国外的链接 所以速度比较慢 需要换成国内的源 设置kali的更新源 在终端中打开sources list root kali v
  • 海康威视web插件【浏览器部分兼容& 全兼容】

    更新时间 2020年9月18日 前言 博主自从写了这篇文章到现在 有好多友友来问我问题 以及我自己也在不断的尝试开发 现在我归纳一下从17年到现在我遇到的问题和友友们遇到的问题以及一些资料总结 资料 3 0开发包 https downloa
  • Java中的File与字符流,字节流

    File File类概述和构造方法 File 他是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于FIle而言 其封装的并不是一个真正存在的文件 仅仅是一个路径名而已 它可以是存在的 也可以是不存在的 将来是要通过
  • Java 统计连续签到天数

    说明 签到功能根据业务情况的不同大致分为两种 一种是只要进入系统就会默认签到 另外一种是进入系统之后需要用户手动点击签到按钮进行签到 两种情况最大的区别就是 自动签到连续签到天数肯定至少为1天 而手动签到的情况则需要考虑断签的情况 1 自动
  • 关于list容器(链表)

    list容器基本概念 list优点 list容器的迭代器 以下代码为验证list是否为循环链表 list构造函数 list数据元素插入和删除操作 list大小操作 list赋值操作 list数据的存取 list常用操作 list容器基本概念
  • QGLViewer+VS(MSVC2013)配置

    工具 libQGLViewer 2 7 2 Visual Studio 2013 Uitimate QT5 9 1 MSVC2013 另外在VS中使用QT显示界面需要下载qt vsaddin msvc2013 2 2 0 vsix官网下载
  • STM32的HAL库开发系列 - GPIO中断/外部中断EXTI

    STM32的HAL库开发系列 GPIO中断 外部中断EXTI 中断它可以在GPIO口的电平发生变化时产生中断 从而使得STM32微控制器能够及时响应外部设备的变化 STM32的GPIO中断 外部中断EXTI可以配置为上升沿中断 下降沿中断和
  • c/c++教程 - 2.4.3 this指针作用,链式编程思想,空指针访问成员函数,const修饰成员函数,常函数,常对象

    目录 4 3 C 对象模型和this指针 4 3 1 成员变量和成员函数分开存储 4 3 2 this指针概念 非常重要 4 3 3 空指针访问成员函数 4 3 4 const修饰成员函数 相关教程 4 3 C 对象模型和this指针 4
  • C++基本数据类型

    一 数据类型 C 的数据类型有四类 基本类型 结构类型 指针类型 和空类型 void 二 部分基本数据类型说明 1 整型 1 int 整数就是没有小数点部分的数字 如2 98 100和0 在C 中提供多种整型 按示数范围分为短整数 shor
  • "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)...

    不知什么时候开始 每次我在运行xcode在真机上 或者archive打包的时间 都会弹出输入用户名和密码的框 搞的烦死了 解决方法 打开钥匙串访问 双击那些密钥弹出框 改变到允许所有应用程序访问此项目 输入一次密码即可 解决 不用每次输入了
  • Qt Widgets 与 QML/Qt Quick

    Qt Widgets 更老 更成熟 可以做gui界面 适合传统的桌面程序 QML Qt Quick 开发更 现代 的 UI 与高级应用 渲染效果更佳 界面更炫酷 参考 https my oschina net u 4000302 blog
  • Ant Design 常见用法与坑点总结(一)

    前言 Ant Design 是蚂蚁出品的出色优秀的 React 组件库 相信使用 React 进行管理系统开发的小伙伴们或多或少都接触过 Ant Design 很多公司基于 React 开发的管理端系统也都是使用 Ant Design 的组
  • 运动估计与运动补偿

    运动估计与运动补 偿 改正 2010 11 17 10 29 29 运动补偿是通过先前的局部图像来预测 补偿当前的局部图像 它是减少帧序列冗余信息的有效方法 运动估计是从视频序列中抽取运动信息的一整套技术 运动估计与运动补偿技术 MPEG
  • 基于matlab的长短期神经网络LSTM的电力负荷预测

    目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的电力负荷预测 MATALB代码 效果图 结果分析 展望 参考论文 背影 电力负荷预测的实质是从已知的电力系统 经济 社会 气象等情况出发 根据历史负荷变化
  • Vue入门基础(环境搭建+软件安装+问题解决)

    如何创建一个vue项目 打开cmd 输入如下指令 因人而异自己电脑上就进入想创建的目录 输入vue init webpack 项目名称 接下来打开vscode找到新建的文件夹 package json经过观察可以发现 现在没有配置Vuex
  • HTMLCanvasElement.toDataURL()

    HTMLCanvasElement toDataURL 方法返回一个包含图片展示的 data URI 可以使用 type 参数其类型 默认为 PNG 格式 图片的分辨率为96dpi 如果画布的高度或宽度是0 那么会返回字符串 data 如果