Je tente de redimensionner les dimensions d'une image tout en conservant ses proportions. Cela semble être une tâche très simple, mais je ne peux pas trouver une réponse rellevent n'importe où .. (relatif à l'objet Image()
de JavaScript). Il me manque probablement quelque chose de très évident. Voici ce que je suis en train de réaliser:Modifier les dimensions de l'objet() (largeur et hauteur)
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;
}
};
Ceci est de redimensionner proportionnellement une image avant d'être tiré sur une toile comme ceci: context.drawImage(img,0,0,canvas.width,canvas.height);
.Cependant il semblerait que je ne peux pas changer directement Image()
dimensions, alors comment est-il fait ? Merci.
Modifier: Je n'ai pas résolu correctement l'image proportions en utilisant la multiplication croisée. @markE fournit une méthode soignée pour obtenir le bon ratio. Ci-dessous mon nouveau (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 devez définir la taille e L'image dans les arguments passés à ['drawImage'] (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/drawImage). De même, en général, il est plus sûr de définir d'abord un gestionnaire de charge pour une image, puis le src. – Teemu
Pouvez-vous fournir plus de détails pour de meilleurs tests? - comme la référence de l'image et le HTML. – Sarhanis
C'est vrai, merci @Teemu Cependant si je mets ces variables comme si 'context.drawImage (img, 0,0, img.width, img.height);' ou 'context.drawImage (img, 0,0 , null, null); ', il étire ou ne modifie pas les dimensions de l'image. Il semblerait que 'Image()' n'a pas les variables '.width' et' .height'? – TheMintyMate