JavaScript canvas.drawImage alpha损失

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript canvas.drawImage alpha损失相关的知识,希望对你有一定的参考价值。

javascript的新手。

我正在构建一个网站,将模板图像与用户的输入进行比较,并构建一些图像处理指令。模板图像存储在站点的文件夹中。

$(function() {
	$("#btnDirective").click(generateEmoteDirectiveFile);
});

function generateEmoteDirectiveFile() {
	getImageData('imgs/templates/human.png');
}

function getImageData(source) {
    var image = new Image();
	
    image.onload = function () {
        var canvas = document.createElement('canvas');
        canvas.width = this.naturalWidth;
        canvas.height = this.naturalHeight;
		
        var ctx = canvas.getContext('2d');
		ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
		var data = ctx.getImageData(0, 0, canvas.width, canvas.height).data;

		for (var px = 0, cx = canvas.width * canvas.height * 4; px < cx; px += 4)
			if (data[px+3] != 255 && data[px+3] != 0)
				console.log("Alpha: " + data[px+3]);
		
    };
	image.src = source;
}
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="scripts/jquery-1.11.3.min.js"></script>
		<script src="scripts/script.js"></script>
	</head>
	<body>
		<button id="btnDirective">Generate</button>
	</body>
</html>

'imgs/templates/human.png'包含许多半透明值,从不提取:

答案

所以你试图得到每个像素的整数值,它的alpha值既不是0也不是255?

那么,您的图像具有完全透明的像素,或者它们是纯白色/黑色。所以你没有部分透明的像素。

请参阅下面使用的Emojipedia的辣椒表情符号图像。大约约6%的像素是部分透明的(围绕边界)。

$(function() {
  $('#btnDirective').click(generateEmoteDirectiveFile);
});

function generateEmoteDirectiveFile() {
  getImageData('https://i.imgur.com/4LzuX3G.png');
  getImageData('https://i.imgur.com/R7g697w.png'); // Using a testable image
}

function getImageData(source) {
  var image = new Image();

  image.crossOrigin = 'Anonymous'; // This allows Imgur CORS...

  image.onload = function() {
    var canvas = document.createElement('canvas');
    canvas.width = this.naturalWidth;
    canvas.height = this.naturalHeight;

    document.body.appendChild(canvas); // Add canvas to body...

    var ctx = canvas.getContext('2d');
    ctx.drawImage(this, 0, 0, canvas.width, canvas.height);
    var data = ctx.getImageData(0, 0, canvas.width, canvas.height).data;

    var pixels = canvas.width * canvas.height;
    var alphaValues = [];
    for (var px = 0, cx = pixels * 4; px < cx; px += 4) {
      if (data[px + 3] != 255 && data[px + 3] != 0) {
        alphaValues.push(data[px + 3]);
      }
    }
    var nonAlphaPixels = (alphaValues.length / pixels * 100).toFixed(2);
    console.log('Alpha (' + nonAlphaPixels + '%): ' + alphaValues.join(','));
  };

  image.src = source;
}

function drawPartialPixels(imageData) {
  
}
body { background: #444; }
#btnDirective { display: block; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="btnDirective">Generate</button>

以上是关于JavaScript canvas.drawImage alpha损失的主要内容,如果未能解决你的问题,请参考以下文章

javascript JavaScript isset()等效: - JavaScript

JavaScript 使用JavaScript更改CSS(JavaScript)

JavaScript之基础-1 JavaScript(概述基础语法)

前端基础-JavaScript的基本概述和语法

JavaScript

JavaScript