Tôi đang cố gắng tạo một hình ảnh thu nhỏ ở phía máy khách bằng cách sử dụng javascript và phần tử canvas, nhưng khi tôi thu nhỏ hình ảnh xuống, nó trông rất tệ. Trông như thể nó bị thu nhỏ trong photoshop với bộ lấy mẫu được đặt thành 'Hàng xóm gần nhất' thay vì bicubic. Tôi biết có thể làm cho điều này trở nên đúng, bởi vì trang web này có thể làm điều đó tốt chỉ bằng cách sử dụng một khung vẽ. Tôi đã thử sử dụng cùng một mã mà họ làm như được hiển thị trong liên kết "[Nguồn]", nhưng nó vẫn trông rất tệ. Có cái gì tôi đang thiếu, một số cài đặt cần phải được đặt hoặc một cái gì đó?
BIÊN TẬP:
Tôi đang cố gắng thay đổi kích thước một jpg. Tôi đã thử thay đổi kích thước jpg tương tự trên trang web được liên kết và trong photoshop, và nó trông ổn khi thu nhỏ.
Đây là mã có liên quan:
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:
Có vẻ như tôi đã nhầm, trang web được liên kết đã không làm tốt hơn công việc thu nhỏ hình ảnh. Tôi đã thử các phương pháp khác được đề xuất và không có phương pháp nào tốt hơn. Đây là những gì các phương pháp khác nhau dẫn đến:
Photoshop:
Tranh sơn dầu:
Hình ảnh với kết xuất hình ảnh: tối ưu hóa được thiết lập và thu nhỏ theo chiều rộng / chiều cao:
Hình ảnh với kết xuất hình ảnh: tối ưu hóa được thiết lập và thu nhỏ với -moz-Transform:
Canvas thay đổi kích thước trên pixastic:
Tôi đoán điều này có nghĩa là firefox không sử dụng lấy mẫu bicubic như được yêu cầu. Tôi sẽ phải đợi cho đến khi họ thực sự thêm nó.
EDIT3: