1) Делайте див, размером с картинку, в нем фоновым рисунком вставляйте картинку. В див img с прозрачным pix.gif и растягивайте img на весь див. Таким образом нельзя будет сохранить картинку тыкнув правой кнопкой и нажав "Save image as". Если нажать F12 и открыть developer tools то все конечно всплывет наружу и можно будет вытащить картинку. Поэтому мы переходим к ...
2) Одноразвый урл для картинки. Т.е. мы вставляем не site.ru/my.jpg а site.ru/getmyjpg?toket= Токен вы генерируете вместе с html кодом, а в обработчике getmyjpg проверяете его, инвалидируете (удаляете из БД) и этот урл перестает быть валидным. Т.е. если открыть девелопер тулс и скопировать упл до картинки, то он окажется уже не рабочим.
Правда это не спасет от того, чтобы скачать html без картинок, взять еще рабочий урл и скачать картинку. Но также это не спасет от того, чтобы снять скриншот или сфоткать экран на фотоаппарат. Так что в общем-то это приемлимый и, с моей точки зрения, максимально возможный уровень "усложнения скачки" картинки.