Самый простой способ - не показывать Ваше супер ценное изображение кому-либо вообще. В любом другом случае человек его сможет скачать(читать как "достать из кэша своего браузера").
Для того чтобы хоть как-то защитить картинки на сайта можете использовать один из спосбов:
- Наложить водяной знак - легко реализуемо, см. либу image magic
- Прятать картинку в CSS через background-image
- Загружать картинку через Angular-директиву
- Резать картинку на фрагменты 5 х 5 пикселей, собирая ее потом сеткой
- Смотреть user-agent клиента и, если он пустой или не валидный(какой-то бред, робот, не из списка), отдавать 404 ошибку либо другую картинку, аля "Это изображенние украли с сайта lallalala.com
- Аналогично пункту выше, только смотрим теперь предварительно установленные пользователю cookie
Я когда-то реализовывал связку из 3 + 4 способа. У моего клиента был сайт, который в качестве донора постоянно использовали "нехорошие люди". Разумеется был автоматический парсинг контента. Роботы выдергивали ссылки на картинки и использовали их у себя. Трафик у клиента был бешеный, дисковая подсистема сервера это дело не вывозила, из-за чего и были тормоза. Результат такой - 50% парсить его перестали от слова "вообще", 20% адаптировали код под написанную защиту, 30% - банально забили(парсили с битыми ссылками/кривыми картинками), на сколько я понял. Цифры получены на основе моих наблюдений в течении 3-х месяцев после внедрения.
Этот случай был где-то в 2011 или 2012. Если бы эта же задача мне пришла в 2017, я бы просто наложил на картинки водяные знаки и подключил бы CloudFront от AWS, на чем бы все и закончилось, но в те годы я был юн и неопытен...