Опираясь на ответ Джеффа, ваш первый шаг - создать холст-представление вашего PNG.Следующее создает закадровый холст той же ширины и высоты, что и ваше изображение, и на нем нарисовано изображение.
var img = document.getElementById('my-image');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
После этого, когда пользователь щелкает, используйте event.offsetX
и * 1005.* чтобы получить должность.Затем его можно использовать для получения пикселя:
var pixelData = canvas.getContext('2d').getImageData(event.offsetX, event.offsetY, 1, 1).data;
Поскольку вы захватываете только один пиксель, pixelData - это массив из четырех записей, содержащий значения R, G, B и A пикселя.Для альфы все, что меньше 255, представляет некоторый уровень прозрачности, при этом 0 полностью прозрачен.
Вот пример jsFiddle: http://jsfiddle.net/thirtydot/9SEMf/869/ Я использовал jQuery для удобства во всем этом, но этоникакие средства не требуются.
Примечание: getImageData
подпадает под политику браузера того же происхождения, чтобы предотвратить утечку данных, что означает, что этот метод не удастся, если вы испачкаете холст с изображением из другого доменаили (я полагаю, но некоторые браузеры могут решить эту проблему) SVG из любого домена.Это защищает от случаев, когда сайт обслуживает пользовательский актив изображения для вошедшего в систему пользователя, и злоумышленник хочет прочитать изображение, чтобы получить информацию.Вы можете решить эту проблему, обслуживая образ с того же сервера или внедрив Совместное использование ресурсов из разных источников .