WordPress ACF delete image from media library

You’re close – couple of things:

  1. $field is an array representation of the field, so you need to use $field['name'] which is the name of the field.
  2. get_field will format the value unless you set the third argument to false – we want the ID, not the post object/URL (or whatever setting you configured for your field return value)
  3. Your code won’t delete the image if a user replaces it with a new one (only processes if $value is empty)

Here it is revised:

function wpse_83587_delete_image( $value, $post_id, $field  ) {
    $old_value = get_field( $field['name'], $post_id, false /* Don't format the value, we want the raw ID */ );

    if ( $old_value && ( int ) $old_value !== ( int ) $value )
        wp_delete_attachment( $old_value, true );

    return $value;

add_filter( 'acf/update_value/type=image', 'wpse_83587_delete_image', 10, 3 );