Como outros já apontaram, é impossível. Métodos comuns como desativar o botão direito do mouse, usar o CSS background e outros scripts são bastante fáceis de evitar. O usuário pode simplesmente tirar uma captura de tela do seu site e depois cortar a imagem.
Eu acho que a marca d'água da imagem é uma maneira muito mais eficaz. Isso pode ser feito manualmente (usando o Photoshop, Gimp ou outras ferramentas) ou automaticamente usando um script. No final, depende de quantas imagens você deseja proteger e de como o site é criado.
PHP
Aqui está um pequeno e agradável script PHP que pode marcar qualquer imagem antes de ser baixada pelo usuário: http://andrecatita.com/code-projects/php-automatic-image-watermark/
O Joomla
NiceWatermark é um plugin altamente configurável que adiciona uma marca d'água às suas imagens automaticamente.
O WordPress
Image-Watermark permitirá que você marque imagens durante o upload ou marque imagens existentes.
JS
método de desativar o botão direito.