// 将图片转换为 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 = '' }js上传图片前改变图片的格式为png
张小明
前端开发工程师
Nano Banana AI 绘画创作前端代码(使用claude code编写)
在线 https://chat.xutongbao.top/nextjs/light/nano use clientimport Header from /components/header import {ArrowLeft,Send,RefreshCw,Sparkles,Upload,X,Download,Copy,Check,ImagePlus,Maximize2, } from lucide-react import { useRouter } from next/navigation imp…
无感BLDC控制:反电动势滤波实战
目录 一、核心原理:无传感器 BLDC 与反电动势检测 1. BLDC 无传感器控制的核心逻辑 2. 反电动势获取方式 3. 关键滤波需求 二、反电动势常用滤波方法(硬件 软件) 1. 硬件滤波(前置处理) 2. 软件滤波࿰…
基于Java的家政员工考勤智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
1. 为什么这个毕设项目值得你 pick ? 基于Java的家政员工考勤智慧管理系统的设计与实现聚焦于家政行业需求,集成了包括家政员工管理、岗位管理、客户管理等在内的17个主要功能模块,提供全面的数据录入、审核和统计分析功能,相较于传统的考勤…
ssm数学辅导微信小程序毕业论文+PPT(附源代码+演示视频)
文章目录一、项目简介1.1 运行视频1.2 🚀 项目技术栈1.3 ✅ 环境要求说明1.4 包含的文件列表数据库结构与测试用例系统功能结构前台运行截图后台运行截图项目部署源码下载一、项目简介 项目基于微信小程序,使用微信原生开发框架或uni-app框架开发。《ss…
Paperzz 文献综述:让文献整理不再是难题
Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 文献综述https://www.paperzz.cc/journalsReviewedhttps://www.paperzz.cc/journalsReviewed 在学术研究的漫漫长路上,文献综述始终是横亘在研究者面前的第一道关卡。无论是初入学术…
大模型时代的企业AI能力中心建设:AI应用架构师详解如何集成LLM到现有AI中台(附方案)
大模型时代的企业AI能力中心建设:AI应用架构师详解如何集成LLM到现有AI中台(附方案) 一、标题选项 《大模型时代的企业AI能力升级:AI应用架构师手把手教你集成LLM到现有AI中台(附完整方案)》《从传统到智能…