Alexandroppolus,
korih,
const MAX_WIDTH = 600;
const MAX_HEIGHT = 400;
let width = img.width;
let height = img.height;
const ρ = 1 / Math.min(MAX_WIDTH / width, MAX_HEIGHT / height, 1);
width /= ρ;
height /= ρ;
// ......
// дорисовываем новое изображение с позициями и указанным форматом
ctx.drawImage(img, posX * ρ, posY * ρ, this.state.w * ρ, this.state.h * ρ,
posX, posY, this.state.w, this.state.h);