优化浏览器侧图像大小
Optimal browser side image resizing?
基于互联网上的代码,我正在浏览器端调整图像大小。我使用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
由于我正在进行的一个项目,我做了一些研究,很明显,即使在你提出问题两年后,似乎仍然没有在浏览器端调整图像大小的标准方法。但上面提到的图书馆应该能做到这一点。
相关文章:
- 使图像在单击时展开到不大于浏览器
- 防止“;jQuery(html)"防止触发浏览器请求图像和其他参考内容
- 用于图像和基于浏览器的图表的图表框架
- 如何在调整浏览器大小时将图像保持在适当位置
- 来自流星模板的 HTML 图像链接未由浏览器呈现
- 使用现有代码更改基于浏览器宽度的图像url
- 阻止浏览器缓存上载的图像
- 在Android浏览器中将图像渲染为数据流
- 从imgur api的另一个浏览器拖放图像
- 在 Web 浏览器中优先下载图像的技术
- 灯箱类型的东西,使图像成为浏览器高度的百分比
- 谷歌浏览器控制台,打印图像
- 如何在浏览器宽度/高度变化时动态调整图像网格的大小
- 接受从另一个浏览器窗口拖放图像
- 如何在上传前在浏览器中去除图像元数据(javascript)
- 如何在浏览器中呈现动态图像
- 将svg保存到磁盘作为png图像浏览器差异
- 有没有办法替换尚未加载的默认图像浏览器图标
- 如何将所有 HTML(包括 SVG 和底层 CSS/JS)转换为 PNG 或图像浏览器端
- 简单的图像浏览器在ckeditor