Я пытаюсь создать уменьшенное изображение на стороне клиента, используя javascript и элемент canvas, но когда я уменьшаю изображение, оно выглядит ужасно. Похоже, что он был уменьшен в фотошопе с передискретизацией, установленной на "Nearest Neighbor" вместо Bicubic. Я знаю, что можно сделать так, чтобы это выглядело правильно, потому что этот сайт может делать это очень хорошо, даже используя canvas. Я пытался использовать тот же код, который они делают, как показано в ссылке "[Source]", но он все равно выглядит ужасно. Есть ли что-то, что я пропускаю, какие-то настройки, которые нужно установить или что-то?
РЕДАКТИРОВАТЬ:
Я пытаюсь изменить размер JPG. Я попытался изменить размер того же самого jpg на связанном сайте и в фотошопе, и это выглядит хорошо, когда уменьшено.
Вот соответствующий код:
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:
Кажется, я ошибся, связанный веб-сайт не справился с работой по уменьшению изображения. Я попробовал другие предложенные методы, и ни один из них не выглядит лучше. Вот к чему привели разные методы:
Photoshop:
Холст:
Изображение с рендерингом изображения: optimizeQuality установлено и масштабировано по ширине/высоте:
Изображение с рендерингом изображений: optimizeQuality установлено и масштабировано с -moz-transform:
Размер холста по пикселю:
Я предполагаю, что это означает, что Firefox не использует бикубическую выборку, как предполагалось. Мне просто нужно подождать, пока они на самом деле не добавят его.
EDIT3: