如果你可以同时拥有两张图片(一张有斑点,一张没有),我认为你可以使用 HTML5 画布做到这一点。
- 正常绘制图像
- 在主图像下方绘制 blob 图像,使其不可见
- 将 blob 复制到 Canvas
- onMouseOver,在适当的坐标处检索画布的像素数据(R、G、B 和 alpha)
- 利润
Twist :如果您不需要它用于其他任何事情,您也许可以只使用一个图像及其 alpha 通道来执行此操作 - 除了在 blob 1、2 和 3 中的任何地方,给像素一个完全不透明度 (A=255),它将具有等于 255-(1,2,3...) 的不透明度。你不能有太多不同的斑点,否则透明度会变得很明显。没试过,但应该可以。考虑到“仅 blob”图像可能具有的可压缩性,一对图像(一个不透明,一个也没有透明并且只有 N+1 种颜色,PNG 压缩)应该会产生更好的结果。
带有两个图像的或多或少的伪代码,使用 jQuery(可以不使用):
var image = document.getElementById('mainImage')
var blobs = document.getElementById('blobImage');
// Create a canvas
canvas = $('<canvas/>')[0];
canvas.width = image.width;
canvas.height = image.height;
// IMPORTANT: for this to work, this script and blobImage.src must be both
// in the same security domain, or you'll get "this operation is insecure"
canvas.getContext('2d').drawImage(blobs, 0, 0, image.width, image.height);
// Now wait for it.
$('#mainImage').mouseover(function(event) {
// TO DO: offset clientX, clientY by margin on mainImage
var ctx = canvas.getContext('2d');
// Get one pixel
var pix = ctx.getImageData(event.clientX, event.clientY, 1, 1);
// Retrieve the red component
var red = pix.data[0];
if (red > 128) {
// ... do something for red
}
});