Когда ты пишешь width=200px, то ты просто задаёшь стиль для элемента. Естественно, что браузер не загрузит картинку меньшего размера, ведь он ничего не знает, что на "том конце". Он делает запрос, загружает данные. И загрузит он естественно картинку, размером 400х400. Потом браузер применяет стиль, т.е. уменьшает элемент img в соответствии с заданными правилами, заполняя этот элемент твоей картинкой. Таким образом, он грузит оригинал, а потом на лету его изменяет при рендере.
Когда ты изменяшь размер картинки в графическом редакторе, ты желаешь необратимые изменения с самой картинкой. Естественно, качество её тоже изменится. И браузер будет грузить с сервера изображение уже не 400х400, а 200х200.