Sto cercando di creare una miniatura sul lato client usando javascript e un elemento canvas, ma quando rimpicciolisco l'immagine, sembra terribile. Sembra che sia stato ridimensionato in Photoshop con il ricampionamento impostato su "Prossimo prossimo" anziché Bicubic. So che è possibile ottenere questo aspetto giusto, perché questo sito può farlo bene anche usando una tela. Ho provato a usare lo stesso codice che hanno mostrato nel link "[Source]", ma sembra ancora terribile. C'è qualcosa che mi manca, qualche impostazione che deve essere impostata o qualcosa del genere?
MODIFICARE:
Sto cercando di ridimensionare un jpg. Ho provato a ridimensionare lo stesso jpg sul sito collegato e in Photoshop e sembra ridimensionato.
Ecco il codice pertinente:
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:
Sembra che mi sbagliassi, il sito web collegato non stava facendo un lavoro migliore nel ridimensionare l'immagine. Ho provato gli altri metodi suggeriti e nessuno di loro ha un aspetto migliore. Questo è il risultato dei diversi metodi:
Photoshop:
Tela:
Immagine con rendering dell'immagine: ottimizzare la qualità impostata e ridimensionata con larghezza / altezza:
Immagine con rendering delle immagini: ottimizzare la qualità impostata e ridimensionata con -moz-transform:
Ridimensionamento tela su pixastico:
Immagino che questo significhi che Firefox non sta usando il campionamento bicubico come dovrebbe. Dovrò solo aspettare fino a quando non lo aggiungeranno effettivamente.
Edit3: