IT序号网

HTMLCanvasElement.toDataURL()

flyfish 2021年05月25日 编程语言 338 0

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); 
  } 
}

 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!