当前位置: 首页 > news >正文

js上传图片前改变图片的格式为png

// 将图片转换为 PNG 格式 const convertImageToPng = (file: File): Promise<File> => { return new Promise((resolve, reject) => { const reader = new FileReader() reader.onload = (e) => { const img = new window.Image() img.onload = () => { // 创建 canvas const canvas = document.createElement('canvas') canvas.width = img.width canvas.height = img.height // 绘制图片到 canvas const ctx = canvas.getContext('2d') if (!ctx) { reject(new Error('无法获取 canvas context')) return } ctx.drawImage(img, 0, 0) // 转换为 PNG blob canvas.toBlob( (blob) => { if (!blob) { reject(new Error('图片转换失败')) return } // 创建新的 File 对象 const pngFile = new File( [blob], file.name.replace(/\.[^.]+$/, '.png'), { type: 'image/png', } ) resolve(pngFile) }, 'image/png', 1.0 ) } img.onerror = () => reject(new Error('图片加载失败')) img.src = e.target?.result as string } reader.onerror = () => reject(new Error('文件读取失败')) reader.readAsDataURL(file) }) } // 上传图片到七牛云 const handleImageUpload = async (e: React.ChangeEvent<HTMLInputElement>) => { const files = e.target.files if (!files || files.length === 0 || !qiniuToken) return const file = files[0] try { // 将图片转换为 PNG 格式 const pngFile = await convertImageToPng(file) const formData = new FormData() const key = `ai/mjBaseImg/${Date.now()}_${pngFile.name}` formData.append('file', pngFile) formData.append('token', qiniuToken) formData.append('key', key) const response = await fetch('https://upload-z1.qiniup.com', { method: 'POST', body: formData, }) const result = await response.json() if (result.code === 200) { const imageUrl = `https://static.xutongbao.top/${result.data.key}` setUploadedImages((prev) => [...prev, imageUrl]) } } catch (error) { console.error('上传失败:', error) } // 清空 input,允许重复选择同一文件 e.target.value = '' }
http://www.jsqmd.com/news/259356/

相关文章:

  • 11.3 可靠性工程与测试验证:构建可信赖的机器人系统
  • 硬硅酸钙石保温板选购攻略,2026年优选厂商揭秘,玻璃热弯模具/碳纤维增强硅酸钙板,硬硅酸钙石保温板厂家推荐排行榜 - 品牌推荐师
  • 2026年汽车后视镜热弯模具优选厂家,实力品牌大揭秘,铝行业精炼用热鼎盘,汽车后视镜热弯模具实力厂家排行 - 品牌推荐师
  • 2026年汽车后视镜热弯模具优选厂家,实力品牌大揭秘,铝行业精炼用热鼎盘,汽车后视镜热弯模具实力厂家排行 - 品牌推荐师
  • XMLHttpRequest 从入门到实战:GET/POST 请求完整案例
  • 全栈分页方案:MyBatisPlus后端与Thymeleaf前端深度整合指南 - 详解
  • 国内MBR平板膜优选指南:2026年靠谱企业榜单,超滤MBR膜/熔喷滤芯/国产MBR膜,MBR平板膜产品推荐榜 - 品牌推荐师
  • 国内MBR平板膜优选指南:2026年靠谱企业榜单,超滤MBR膜/熔喷滤芯/国产MBR膜,MBR平板膜产品推荐榜 - 品牌推荐师
  • 11.2 系统集成与调试:从组件验证到整机性能交付
  • 【2026实测】HostDare CN2 GIA VPS:高性价比稳如老狗,内附隐藏福利与避坑指南
  • test1
  • day3 补
  • 日程3
  • 无感BLDC控制:反电动势滤波实战
  • 2026滤芯市场新动向:哪些滤芯工厂值得选?进口MBR平板膜/0.5um滤芯/新能源行业树脂,滤芯厂商哪家好 - 品牌推荐师
  • Product Trick
  • 交易平台如何优化合约交易体验WEEX一种交互与机制设计的行业观察
  • AI销冠系统是什么?数字员工在提升企业效率中的关键作用是什么?
  • 题解:P14973 『GTOI - 2D』木棍
  • 【多式联运】不确定需求下考虑混合时间窗的多式联运路径优化附Matlab代码
  • Agent设计模式学习(基于langchain4j实现)(5) - 条件工作流
  • 家长必知:孩子日常如何有效预防近视
  • 学长亲荐9个一键生成论文工具,自考毕业论文轻松搞定!
  • 深入解析:斯坦福CS520知识图谱课程深度解析:从理论基础到工业应用的前沿指南[附中英文 PPT]
  • SEO 和 SEM 到底差在哪?—— 用最土的大白话给你拆明白
  • 【动态多目标优化】进化动态约束多目标优化测试集DCP1-DCP9的TruePF研究附Matlab代码
  • 【独家创新】基于ASL-QPSO-LSTM-AdaBoost的时间序列预测模型研究附Matlab代码
  • ssm数学辅导微信小程序毕业论文+PPT(附源代码+演示视频)
  • 【多传感器融合】在电力系统中针对网络入侵的多源数据融合附Python代码
  • 提示工程架构师揭秘:Agentic AI在智能制造中的3大技术壁垒与突破方案