优化浏览器侧图像大小

Optimal browser side image resizing?

本文关键字:图像 浏览器 优化      更新时间:2023-09-26

基于互联网上的代码,我正在浏览器端调整图像大小。我使用canvas,所以我从一些简单的调整大小中获得了一个新的png。

这就是我正在尝试的:

const MAX_SIZES = {
  thumbnail: {
    MAX_WIDTH: 200,
    MAX_HEIGHT: 160
  },
  small: {
    MAX_WIDTH: 400,
    MAX_HEIGHT: 300,
  },
  medium: {
    MAX_WIDTH: 800,
    MAX_HEIGHT: 600
  }
};
export const resize = (file, size) => {
return new Promise(function (resolve, reject) {
let _this = this;
const { MAX_WIDTH, MAX_HEIGHT } = MAX_SIZES[size];
let img = document.createElement("img");
let reader = new FileReader();
reader.onload = function(e) {
  img.src = e.target.result;
  let canvas = document.createElement("canvas");
  let ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0);
  let width = img.width;
  let height = img.height;
  if (width > height) {
    if (width > MAX_WIDTH) {
      height *= MAX_WIDTH / width;
      width = MAX_WIDTH;
    }
  } else {
    if (height > MAX_HEIGHT) {
      width *= MAX_HEIGHT / height;
      height = MAX_HEIGHT;
    }
  }
  canvas.width = width;
  canvas.height = height;
  ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0, width, height);
  resolve(dataURItoBlob(canvas.toDataURL("image/png")));
}
reader.readAsDataURL(file);

});

}

所以我面临这些问题:

  • 调整大小的过程非常缓慢
  • 中型图像(800x600)的文件大小很大,有时甚至超过原始图像
  • 一般来说,我会得到一张亮度/颜色增加的照片(这只是一种欣赏)

所以,我想知道我是否可以采取任何便宜的策略来改进我的调整大小的替代方案。我甚至会对任何PNG图像优化感兴趣,以避免大文件。

对于此类问题,我通常会使用现有的解决方案/服务进行实时图像处理。https://www.imgix.com/

对于浏览器端图像调整大小和压缩,我可以推荐一个名为加载图像的特定javascript库,它使您能够通过javascript轻松地裁剪、压缩和调整图像大小。

https://github.com/blueimp/JavaScript-Load-Image

由于我正在进行的一个项目,我做了一些研究,很明显,即使在你提出问题两年后,似乎仍然没有在浏览器端调整图像大小的标准方法。但上面提到的图书馆应该能做到这一点。