One idea is to use a canvas. 1st paste the character and then paste with "destination-out" anything in front of the player. Then loop over all the pixels of the canvas and see if any pixels aren't transparent. The main issue with that is it's very slow.
If you can treat the player as a square it can be done much quicker.
For instance to check if a player's bounding box is inside another box you can do this:
box.bbleft<=sprite.bbleft
box.bbright>=sprite.bbright
box.bbtop<=sprite.bbtop
box.bbbottom>=sprite.bbbottom
It would become much more complicated if you wanted to know if multiple boxes covered the sprite completely. It would probably require splitting the bboxes up.
Another idea would be to loop over the positions of the sprite and 1st check if the point overlaps the sprite then see of it's overlapping the object's above the sprite. It could be slow too but you also could do a more coarse check by not checking every point.