Посмотрите на
JCrop. Сам делал недавно такую вещь. Серверная часть есть в примерах на php, но без проблем можно переписать и под другие. Весь принцип работы в трех шагах:
1) На клиенте в img грузим картинку. Кидаем .JCrop() на эту картинку;
2) Выбираем нужный регион для кропа;
3) При сабмите он отправляет ширину, высоту и координаты выделенной области. На сервере уже просто делаем copy с исходного и режем его по заданным данным при сабмите.
Все просто и элегантно.