Как сделать ограничение, чтобы пользователь мог посмотреть картинку только один раз и не мог её сохранить?
В вебе "показать" означает "отправить на устройство пользователя". Поэтому, ваша задача решения не имеет.
Вы можете осложнить процесс выдирания картинки, но любой, кто умеет нажимать в браузере F12 всё равно сможет её скачать.
Помимо этого встаёт вопрос идентификации пользователя - как узнать, что он уже посмотрел изображение? Самое простое - писать в куки или сессию, но у них ограничен срок жизни. Да, есть evercookie, но куками, вдобавок, можно манипулировать. Следовательно, нужен какой-то другой механизм. Если картинки доступны только зарегистрированным пользователям, то можно идентифицировать их так и писать информацию о просмотре в БД. Но если доступ к ним не ограничен авторизацией, то вы либо будете выдавать картинку одному клиенту несколько раз, либо не будете выдавать её каким-то клиентам вообще, поскольку определение по ip и юзерагенту очень ненадёжно.
Это, что касается картинок в вакууме. А теперь опишите задачу максимально конкретно, чтобы мы могли посоветовать решение, которое будет работать наиболее надёжно (с учётом перечисленных выше ограничений).
Ждите внедрения DRM защиты для изображений и поддержки ее в браузерах, других выходов нет, все что пользователь увидел на странице возможно и сохранить и увидеть еще раз. Любой самый хитрый способ обломится от фотоаппарата перед монитором)))