J'essaie de créer une image miniature du côté client à l'aide de javascript et d'un élément canvas, mais lorsque je réduis l'image, elle a un aspect terrible. On dirait qu'elle a été réduite dans Photoshop avec un rééchantillonnage réglé sur "Nearest Neighbor" au lieu de Bicubic. Je sais qu'il est possible d'obtenir un aspect correct, car ce site peut le faire très bien en utilisant une toile également. J'ai essayé d'utiliser le même code que celui qu'ils utilisent, comme indiqué dans le lien "[Source]", mais l'apparence est toujours aussi mauvaise. Y a-t-il quelque chose qui m'échappe, un paramètre à définir ou autre ?
EDITAR:
J'essaie de redimensionner un fichier jpg. J'ai essayé de redimensionner le même fichier jpg sur le site lié et dans Photoshop, et il semble correct lorsqu'il est réduit.
Voici le code correspondant :
reader.onloadend = function(e)
{
var img = new Image();
var ctx = canvas.getContext("2d");
var canvasCopy = document.createElement("canvas");
var copyContext = canvasCopy.getContext("2d");
img.onload = function()
{
var ratio = 1;
if(img.width > maxWidth)
ratio = maxWidth / img.width;
else if(img.height > maxHeight)
ratio = maxHeight / img.height;
canvasCopy.width = img.width;
canvasCopy.height = img.height;
copyContext.drawImage(img, 0, 0);
canvas.width = img.width * ratio;
canvas.height = img.height * ratio;
ctx.drawImage(canvasCopy, 0, 0, canvasCopy.width, canvasCopy.height, 0, 0, canvas.width, canvas.height);
};
img.src = reader.result;
}
EDIT2 :
Il semble que je me sois trompé, le site web lié ne faisait pas un meilleur travail pour réduire la taille de l'image. J'ai essayé les autres méthodes suggérées et aucune d'entre elles n'est meilleure. Voici le résultat des différentes méthodes :
Photoshop :
Toile :
Image avec rendu d'image : optimizeQuality défini et mis à l'échelle avec largeur/hauteur :
Image avec image-rendering : optimizeQuality set et mise à l'échelle avec -moz-transform :
Redimensionnement de la toile sur pixastic :
Je suppose que cela signifie que Firefox n'utilise pas l'échantillonnage bicubique comme il est censé le faire. Je vais devoir attendre qu'ils l'ajoutent vraiment.
EDIT3 :
0 votes
Pouvez-vous afficher le code que vous utilisez pour redimensionner l'image ?
0 votes
Essayez-vous de redimensionner une image GIF ou une image similaire avec une palette limitée ? Même dans Photoshop, ces images ne se réduisent pas bien à moins de les convertir en RVB.
0 votes
Pouvez-vous poster une copie de l'image originale ?
0 votes
Redimensionner l'image en utilisant javascript est un peu compliqué - non seulement vous utilisez la puissance de traitement du client pour redimensionner l'image, mais vous le faites à chaque chargement de page. Pourquoi ne pas simplement enregistrer une version réduite à partir de Photoshop et la servir à la place/en tandem avec l'image originale ?
31 votes
Parce que je suis en train de créer un téléchargeur d'images avec la possibilité de redimensionner et de recadrer les images avant de les télécharger.
0 votes
Pour mémoire, Firefox n'utilise pas le redimensionnement bicubique... il utilise le redimensionnement bilinéaire.
0 votes
Ça ne marche pas pour moi. Ça coupe juste l'image, c'est tout.
0 votes
Malheureusement, je ne peux plus ouvrir votre image dans pixastic en raison de la limitation de la taille des fichiers :(
0 votes
Voici également une excellente solution à ce problème : stackoverflow.com/questions/18922880/
0 votes
Peut-on l'utiliser pour dessiner n'importe quelle image à l'écran sur un canevas. Je vais avoir un tableau d'images, puis un canevas et chaque fois que je clique sur un bouton, l'image suivante s'affiche jusqu'à ce que j'arrive à la dernière image.
0 votes
Vous avez une erreur, si vous avez width>max, mais en même temps height>max, mais votre ratio maxwidth est inférieur à votre ratio maxheight, c'est toujours trop grand :)