【发布时间】:2014-03-04 00:21:16
【问题描述】:
在将图片上传到服务器之前,我正在使用画布调整客户端图片的大小。
maxWidth = 500;
maxHeight = 500;
//manage resizing
if (image.width >= image.height) {
var ratio = 1 / (image.width / maxWidth);
}
else {
var ratio = 1 / (image.height / maxHeight);
}
...
canvas.width = image.width * ratio;
canvas.height = image.height * ratio;
var resCtx = canvas.getContext('2d');
resCtx.drawImage(image, 0, 0, image.width * ratio, image.height * ratio);
这可行,因为在服务器上保存了调整大小的图像,但有两点我想改进:
图片重量(KB)对我很重要;我想要一个非常轻量级的图像;即使调整大小,画布的图像仍然太重;我可以看到保存在服务器上的图像具有 96 DPI 和 32 位色深的分辨率,即使原始图像的分辨率为 72 DPI 和 24 位色深;为什么?我可以设置画布的图像分辨率吗?
调整大小的图像看起来不是很好,因为调整大小的过程会引入失真......我在这篇文章中尝试了 GameAlchemist 的自定义算法: HTML5 Canvas Resize (Downscale) Image High Quality? 得到了非常好的结果,但是调整大小的图像在 KB 中比原始图像更重!有没有一种好的算法来获得高质量的调整大小的图像,保持它们的轻量级?
【问题讨论】:
标签: javascript html canvas html5-canvas