hook_preprocess_node() or hook_node_view() for html altering the field What's the best way to alter html of an image field? I have imagefield and i want to rewrite it's html from scratch.
hook_preprocess_HOOK will do the job,

You may also take a look at writing your own theme_image_formatter()

It could work in a node_view() but you want to alter the FIELD's HTML.In node_view you would alter the order of fields, hide/show new contents NOT control how they look.. you could absolutely do it, but it will not be the best/Drupal way.

Drupal divides functionality (node_view()) and looks (theme)

In a hook_preprocess_node() you would alter the node template variables, not the field's ones.You would need it to add a class to a node wrapper, to change node templates etc...
you have to go deeper in the theme for this one. 

Examples:

// ALL IMAGES get rounded class.
function YOURTHEME_preprocess_image(&amp;$variables) {
  $variables['attributes']['class'] = array('rounded');
}


and for field

// If field_images in FULL view mode of a node, add/edit variables and choose template
function YOURTHEME_preprocess_field(&amp;$variables) {
  if ($element['#field_name'] == 'field_images' &amp;&amp; $element['#bundle'] == 'YOUR_NODE_TYPE' &amp;&amp; $element['#view_mode'] == 'full') {
 $variables['theme_hook_suggestions'][] = 'field__field_images_YOUR-file-name';
  // Add more variables available in template...
  $variables['toggle'] = 'Read the story';
  $variables['some_text'] = 'Some text';

}