Changement de l'Image() de l'objet dimensions (largeur et hauteur)

J'essaie de redimensionner une image à ses dimensions, tout en conservant ses proportions. Cela semble être une tâche très simple, mais je ne peux pas trouver un rellevent réponse partout.. (concernant JavaScript Image() objet). Je suis probablement manquant quelque chose de très évident. Ci-dessous est ce que je suis en train de réaliser:

var img = new window.Image();
img.src = imageDataUrl;
img.onload = function(){
    if (img.width > 200){
        img.width = 200;
        img.height = (img.height*img.width)/img.width;
    }
    if (img.height > 200){
        img.height = 200;
        img.width = (img.width*img.height)/img.height;
    }
};

C'est proportionnellement redimensionner une image avant d'être dessiné sur une toile comme suit: context.drawImage(img,0,0,canvas.width,canvas.height);.Cependant, il semblerait que je ne peut pas modifier directement Image()dimensions, alors comment est-il fait? Merci.

Edit: je n'ai pas correctement résolu l'image les proportions à l'aide de la croix-multiplication. @markE offre un joli méthode d'obtenir le bon ratio. Ci-dessous mon nouveau (de travail) mise en œuvre:

var scale = Math.min((200/img.width),(200/img.height));
img.width = img.width*scale;
img.height = img.height*scale;
clearCanvas(); //clear canvas
context.drawImage(img,0,0,img.width,img.height);
  • Vous définissez la taille de l'image dans les arguments passés à drawImage. Aussi, en général, il est préférable de définir un gestionnaire de chargement d'une image d'abord, puis de la src.
  • Pouvez-vous fournir plus de détails pour mieux les tests? -- comme la référence de l'image et de l'HTML.
  • C'est vrai, merci @Teemu Cependant si j'ai mis ces variables comme tellement context.drawImage(img,0,0,img.width,img.height); ou context.drawImage(img,0,0,null,null);, il s'étend encore ou ne change pas les dimensions de l'image. Il semblerait Image() n'a pas .width et .height variables?
  • Qu'est-ce que l'effet désiré? Rien de plus grand 200x200 va juste être redimensionnée à 200x200 indépendamment de l'aspect ratio. Êtes-vous en essayant de la rendre toujours visible dans le canevas ou la toujours le couvrir?
  • Je suis d'essayer de maintenir un ratio d'aspect, tout en garantissant l'image s'adapte à l'intérieur de la toile.. en Regardant mon code actuel, je vois ce que tu veux dire - si la largeur de l'image et hieght est plus grand que 200, puis il va simplement se mettre à 200. Que proposez-vous?
InformationsquelleAutor TheMintyMate | 2016-02-24