peixue-dev/peidu/uniapp/utils/imageHelper.js

147 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 图片处理工具
*/
// 默认头像base64编码的SVG
const DEFAULT_AVATAR = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgZmlsbD0iI2U1ZTVlNSIvPjxjaXJjbGUgY3g9IjEwMCIgY3k9IjgwIiByPSIzMCIgZmlsbD0iI2NjYyIvPjxwYXRoIGQ9Ik02MCAxNDAgQzYwIDEyMCA4MCAxMTAgMTAwIDExMCBDMTIwIDExMCAxNDAgMTIwIDE0MCAxNDAgTDYwIDE0MCIgZmlsbD0iI2NjYyIvPjwvc3ZnPg=='
// 默认商品图片
const DEFAULT_PRODUCT = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgZmlsbD0iI2Y1ZjVmNSIvPjxyZWN0IHg9IjYwIiB5PSI2MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIiBmaWxsPSIjZGRkIi8+PHRleHQgeD0iMTAwIiB5PSIxMzAiIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZpbGw9IiM5OTkiPuaaguaXoOWbvueJhzwvdGV4dD48L3N2Zz4='
// 默认背景图片
const DEFAULT_BACKGROUND = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAwIiBoZWlnaHQ9IjMwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImciIHgxPSIwJSIgeTE9IjAlIiB4Mj0iMTAwJSIgeTI9IjEwMCUiPjxzdG9wIG9mZnNldD0iMCUiIHN0eWxlPSJzdG9wLWNvbG9yOiM2NmJiNmE7c3RvcC1vcGFjaXR5OjEiIC8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdHlsZT0ic3RvcC1jb2xvcjojNDNhMDQ3O3N0b3Atb3BhY2l0eToxIiAvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHdpZHRoPSI2MDAiIGhlaWdodD0iMzAwIiBmaWxsPSJ1cmwoI2cpIi8+PC9zdmc+'
// API基础URL - 根据环境自动切换
// #ifdef MP-WEIXIN
const API_BASE_URL = 'https://px.ddn-ai.cloud/api' // 生产环境
// #endif
// #ifdef H5
const API_BASE_URL = process.env.NODE_ENV === 'production'
? 'https://px.ddn-ai.cloud/api' // 生产环境
: 'http://localhost:8089' // 开发环境
// #endif
// #ifndef MP-WEIXIN || H5
const API_BASE_URL = 'http://localhost:8089' // 其他环境默认本地
// #endif
/**
* 获取图片URL
* @param {String} url - 图片URL或路径
* @param {String} type - 图片类型avatar, product, background
* @returns {String} 完整的图片URL
*/
export function getImageUrl(url, type = 'avatar') {
// 如果没有URL返回默认图片
if (!url) {
return getDefaultImage(type)
}
// 如果是完整的HTTP/HTTPS URL直接返回
if (url.startsWith('http://') || url.startsWith('https://')) {
return url
}
// 如果是base64或data URL直接返回
if (url.startsWith('data:')) {
return url
}
// 如果是相对路径拼接API基础URL
if (url.startsWith('/')) {
return `${API_BASE_URL}${url}`
}
// 其他情况拼接API基础URL
return `${API_BASE_URL}/${url}`
}
/**
* 获取默认图片
* @param {String} type - 图片类型
* @returns {String} 默认图片的base64编码
*/
export function getDefaultImage(type = 'avatar') {
switch (type) {
case 'avatar':
return DEFAULT_AVATAR
case 'product':
return DEFAULT_PRODUCT
case 'background':
return DEFAULT_BACKGROUND
default:
return DEFAULT_AVATAR
}
}
/**
* 处理图片加载错误
* @param {Event} e - 错误事件
* @param {String} type - 图片类型
*/
export function handleImageError(e, type = 'avatar') {
console.warn('图片加载失败:', e)
// 返回默认图片
return getDefaultImage(type)
}
/**
* 获取头像URL
* @param {String} avatar - 头像URL或路径
* @returns {String} 完整的头像URL
*/
export function getAvatarUrl(avatar) {
return getImageUrl(avatar, 'avatar')
}
/**
* 获取商品图片URL
* @param {String} image - 图片URL或路径
* @returns {String} 完整的图片URL
*/
export function getProductImageUrl(image) {
return getImageUrl(image, 'product')
}
/**
* 获取背景图片URL
* @param {String} image - 图片URL或路径
* @returns {String} 完整的图片URL
*/
export function getBackgroundImageUrl(image) {
return getImageUrl(image, 'background')
}
/**
* 批量处理图片URL
* @param {Array} images - 图片数组
* @param {String} type - 图片类型
* @returns {Array} 处理后的图片URL数组
*/
export function processImages(images, type = 'product') {
if (!Array.isArray(images)) {
return []
}
return images.map(img => {
if (typeof img === 'string') {
return getImageUrl(img, type)
}
if (img && img.url) {
return getImageUrl(img.url, type)
}
return getDefaultImage(type)
})
}
export default {
getImageUrl,
getDefaultImage,
handleImageError,
getAvatarUrl,
getProductImageUrl,
getBackgroundImageUrl,
processImages
}