В WebKit и вроде 10м ишаке (не уверен) есть поддержка css mask, нужно проверять поддержку и по возможности использовать. Это в тыщу раз быстрее чем работа с пикселями.
$(newImg).attr('class', 'gray')
Слишком общий css-класс. Он может быть определен у юзера. Вообще, зачем тут css-классы назначать?