@lancercomet/utils
Version:
My personal utils lib.
67 lines (66 loc) • 1.9 kB
JavaScript
/**
* 加载图片.
*
* @param {string} url
* @returns {Promise<HTMLImageElement>}
*/
function loadImage(url) {
return new Promise(function (resolve, reject) {
var image = new Image();
image.onload = function () {
resolve(image);
};
image.onerror = function () {
reject(new Error('Failed to load image ' + url));
};
image.src = url;
});
}
/**
* 使用 File 对象创建 HTMLImageElement.
* File 必须为图片文件才能正常工作.
*
* @param {File} file 图片文件.
* @returns {Promise<HTMLImageElement>} 图片节点.
*/
function createImageByFile(file) {
var url = URL.createObjectURL(file);
return loadImage(url);
}
/**
* 通过图片创建 ImageData.
*
* @param {HTMLImageElement} image
* @returns {ImageData}
*/
function createImageData(image) {
var width = image.width, height = image.height;
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var context = canvas.getContext('2d');
context === null || context === void 0 ? void 0 : context.drawImage(image, 0, 0);
return context === null || context === void 0 ? void 0 : context.getImageData(0, 0, width, height);
}
/**
* 是否支持 WebP.
*
* @returns {boolean}
*/
function isSupportWebp() {
// 某些 Android 浏览器不兹词 toDataURL.
// SSR 环境下加入 try 进行容错.
try {
var canvas = document.createElement('canvas');
if (canvas.getContext && canvas.getContext('2d')) {
return canvas.toDataURL('image/webp').indexOf('data:image/webp') === 0;
}
else {
return false;
}
}
catch (error) {
return false;
}
}
export { createImageByFile, createImageData, isSupportWebp, loadImage };