/** * 图片URL优化工具 * 用于优化腾讯云COS图片的清晰度和质量 */ /** * 优化图片URL,添加腾讯云COS图片处理参数 * @param {string} url - 原始图片URL * @param {Object} options - 优化选项 * @param {number} options.quality - 图片质量 (1-100,默认90) * @param {number} options.maxWidth - 最大宽度(可选,用于列表显示) * @param {number} options.maxHeight - 最大高度(可选) * @param {boolean} options.useOriginal - 是否使用原图(不添加任何处理参数) * @returns {string} 优化后的图片URL */ function optimizeImageUrl(url, options = {}) { if (!url || typeof url !== 'string') { return url; } // 如果是本地路径或data URI,直接返回 if (url.startsWith('/') || url.startsWith('data:')) { return url; } // 如果指定使用原图,直接返回 if (options.useOriginal) { return url; } // 检查是否是腾讯云COS的URL const isTencentCOS = url.includes('.cos.') || url.includes('.myqcloud.com'); if (!isTencentCOS) { // 非腾讯云COS的URL,直接返回 return url; } // 如果URL已经包含图片处理参数,先移除 let baseUrl = url.split('?')[0]; const existingParams = url.includes('?') ? url.split('?')[1] : ''; // 构建图片处理参数 const params = []; // 如果指定了最大宽度或高度,使用 imageView2 if (options.maxWidth || options.maxHeight) { let imageViewParams = 'imageView2/0'; if (options.maxWidth) { imageViewParams += `/w/${options.maxWidth}`; } if (options.maxHeight) { imageViewParams += `/h/${options.maxHeight}`; } params.push(imageViewParams); } // 添加质量参数 const quality = options.quality !== undefined ? options.quality : 90; if (quality < 100) { params.push(`imageMogr2/quality/${quality}`); } // 如果有现有参数,合并处理 if (existingParams) { // 如果已有图片处理参数,需要合并 if (existingParams.includes('imageMogr2') || existingParams.includes('imageView2')) { // 保留原有参数,但优先使用新的质量设置 const existingParts = existingParams.split('/'); const newParams = params.join('/'); return `${baseUrl}?${newParams}`; } else { // 其他参数,用&连接 return `${baseUrl}?${params.join('/')}&${existingParams}`; } } else { // 没有现有参数,直接添加 return params.length > 0 ? `${baseUrl}?${params.join('/')}` : baseUrl; } } /** * 获取列表显示的图片URL(中等质量,限制宽度) * @param {string} url - 原始图片URL * @param {number} maxWidth - 最大宽度(默认750,适合列表显示) * @returns {string} 优化后的图片URL */ function getListImageUrl(url, maxWidth = 750) { return optimizeImageUrl(url, { quality: 85, maxWidth: maxWidth }); } /** * 获取预览/大图的图片URL(高质量) * @param {string} url - 原始图片URL * @returns {string} 优化后的图片URL */ function getPreviewImageUrl(url) { return optimizeImageUrl(url, { quality: 95, useOriginal: false // 仍然使用处理参数,但质量更高 }); } /** * 获取原图URL(不添加任何处理参数) * @param {string} url - 原始图片URL * @returns {string} 原图URL */ function getOriginalImageUrl(url) { return optimizeImageUrl(url, { useOriginal: true }); } module.exports = { optimizeImageUrl, getListImageUrl, getPreviewImageUrl, getOriginalImageUrl };