import React, { useState, useRef } from 'react'; import { Upload, Image as ImageIcon, X } from 'lucide-react'; import { fileToBase64 } from '../utils/imageUtils'; interface UploadZoneProps { onImageSelected: (base64: string) => void; selectedImage: string | null; onClear: () => void; } export const UploadZone: React.FC = ({ onImageSelected, selectedImage, onClear }) => { const [isDragging, setIsDragging] = useState(false); const fileInputRef = useRef(null); const handleFileChange = async (e: React.ChangeEvent) => { if (e.target.files && e.target.files[0]) { const base64 = await fileToBase64(e.target.files[0]); onImageSelected(base64); } }; const handleDrop = async (e: React.DragEvent) => { e.preventDefault(); setIsDragging(false); if (e.dataTransfer.files && e.dataTransfer.files[0]) { const base64 = await fileToBase64(e.dataTransfer.files[0]); onImageSelected(base64); } }; if (selectedImage) { return (
Original Character
); } return (
fileInputRef.current?.click()} onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }} onDragLeave={() => setIsDragging(false)} onDrop={handleDrop} className={`w-full h-64 border-2 border-dashed rounded-xl flex flex-col items-center justify-center cursor-pointer transition-all duration-200 group ${isDragging ? 'border-lime-500 bg-lime-50' : 'border-gray-300 hover:border-lime-400 hover:bg-gray-50'}`} >

点击或拖拽上传图片

支持 PNG, JPG, WEBP

); };