Я пытаюсь создать уменьшенное изображение на стороне клиента, используя javascript и элемент canvas, но когда я уменьшаю изображение, оно выглядит ужасно. Похоже, что он был уменьшен в фотошопе с передискретизацией, установленной на «Nearest Neighbor» вместо Bicubic. Я знаю, что можно сделать так, чтобы это выглядело правильно, потому что этот сайт может делать это просто отлично, используя холст. Я пытался использовать тот же код, который они делают, как показано в ссылке «[Source]», но он все равно выглядит ужасно. Я что-то упускаю, какие-то настройки, которые нужно установить, или что-то в этом роде?
EDIT:
Я пытаюсь изменить размер 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:
Canvas:
Изображение с рендерингом изображения: optimizeQuality установлено и масштабировано по ширине / высоте:
Изображение с рендерингом изображения: optimizeQuality установлено и масштабировано с -moz-transform:
Размер холста по пикселю:
Полагаю, это означает, что firefox не использует бикубическую выборку, как это предполагалось. Мне просто нужно подождать, пока они на самом деле не добавят его.
EDIT3:
Исходное изображение