Как изменить размер изображения, не теряя качества?
Из Вашего вопроса абсолютно не понятно как Вы используете этот код и что подразумевается под вопросами "теряется качество".
Если Вы сохраняете jpeg, то у функции imagejpeg  есть 3й параметр quality по умолчанию равный 75.
Замените его хотя бы на 90 и радуйтесь.
Возьмите более менее нормальный инструмент ну или любой другой класс для работы с картинками, всёравно потом пригодится возможность изменения размера, нанесения лого и т.д.