我正在使用以下代码在画布上绘制base64图像。我从PHP中的查询中获取base64字符串。使用globalAlpha,我可以将整个图像的alpha设置为0.我需要使用表单操纵随机像素的alpha。因此,当我使用表单提交7时,需要将7个随机像素设置为从0到255。
是否可以操纵此图像的alpha,然后将其绘制到画布?原始图像保密是非常重要的。
var complex = "<?php echo str_replace("\n", "", $DBimage); ?>";
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var image = new Image();
image.src = "data:image/png;base64," + complex;
image.onload= function(){
ctx.drawImage(image, 0, 0);
}
答案 0 :(得分:0)
<canvas id="rectangle" width="300" height="300" style="border:solid black 1px; </canvas>
javascript
var canvas = document.getElementById('rectangle');
//replace this rectangle drawing by your image
if (canvas.getContext) {
var context = canvas.getContext('2d');
context.fillStyle = "rgb(150,29,28)";
context.fillRect(10, 10, 280, 280);
}
var imgd = context.getImageData(0, 0, canvas.width, canvas.height);
var numberOfAlphaPix = 10000; //this is the number of pixel for which you want to change the alpha channel, I let you do the job to retrieve this number as you wish
//fill an array with numbers that we'll pop to get unique random values
var rand = [];
// Loop over each pixel with step of 4 to store only alpha channel in array ( R=0 ,G=1 , B=2, A=3 )
for (var i = 3; i < imgd.data.length; i += 4) {
rand.push(i);
}
//shuffle the array
for (var i = rand.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var tmp = rand[i];
rand[i] = rand[j];
rand[j] = tmp;
}
for (var i = 0; i < numberOfAlphaPix; i++) {
imgd.data[rand.pop()] = 255; //set alpha channel to 255
}
// Draw the ImageData object at the given (x,y) coordinates.
context.putImageData(imgd, 0, 0);
答案 1 :(得分:0)
我不确定你的意思是“保守秘密”,但我认为你的意思是:
如果这些是唯一的要求(如果它们是要求)那么你将不得不:
这种方法的好处在于您根本不需要使用ImageData。对于每个接收到的像素,您只需fillRect
fillStyle
个RGB值。
这种方法的不太好处是它意味着你必须在服务器上做更多的工作,但是如果你想让图像完全隐藏在客户端之外,这是唯一的方法强>