aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/components/ImageProcessor.tsx
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2024-04-28 18:45:30 +0300
committeromagdy7 <omar.professional8777@gmail.com>2024-04-28 18:45:30 +0300
commite1e42fc6c17ba99b7cad940b3c3e1c97df959140 (patch)
treed9cb78b61514eef078d8284321dad326ad52b949 /frontend/src/components/ImageProcessor.tsx
downloadcloudrender-e1e42fc6c17ba99b7cad940b3c3e1c97df959140.tar.xz
cloudrender-e1e42fc6c17ba99b7cad940b3c3e1c97df959140.zip
Added a simple UI for our application
Diffstat (limited to 'frontend/src/components/ImageProcessor.tsx')
-rw-r--r--frontend/src/components/ImageProcessor.tsx75
1 files changed, 75 insertions, 0 deletions
diff --git a/frontend/src/components/ImageProcessor.tsx b/frontend/src/components/ImageProcessor.tsx
new file mode 100644
index 0000000..bdcae19
--- /dev/null
+++ b/frontend/src/components/ImageProcessor.tsx
@@ -0,0 +1,75 @@
+import React, { useState } from 'react';
+
+const BACK_END_URL = 'http://localhost:5000'
+
+const ImageProcessor = (): JSX.Element => {
+ const [file, setFile] = useState<File | null>(null);
+ const [downloadUrl, setDownloadUrl] = useState<string>('');
+
+ const handleFileChange = (event: React.ChangeEvent<HTMLInputElement>): void => {
+ if (event.target.files) {
+ setFile(event.target.files[0]);
+ }
+ };
+
+ const processImage = async (operation: 'edge_detection' | 'color_inversion'): Promise<void> => {
+ if (!file) {
+ alert('Please select a file first!');
+ return;
+ }
+
+ const formData = new FormData();
+ formData.append('image', file);
+ formData.append('operation', operation);
+
+ try {
+ const response = await fetch(`${BACK_END_URL}/upload`, {
+ method: 'POST',
+ body: formData,
+ });
+
+ const data = await response.json();
+ if (response.ok) {
+ setDownloadUrl(`${data.processed_file}`);
+ console.log(data.processed_file)
+ alert('File processed successfully!');
+ } else {
+ alert(data.error || 'Failed to process the file');
+ }
+ } catch (error) {
+ alert('Error connecting to the server');
+ }
+ };
+
+ const downloadImage = (): void => {
+ if (!downloadUrl) {
+ alert('No processed image available for download!');
+ return;
+ }
+ window.open(downloadUrl);
+ };
+
+ return (
+ <div className="p-8 bg-white rounded-lg shadow-md flex flex-col items-center">
+ <h2 className="text-2xl font-bold mb-4">Image Processing</h2>
+ <div className="mb-4">
+ <label className="block mb-2">Upload an image</label>
+ <input type="file" onChange={handleFileChange} className="mb-4" />
+ </div>
+ <div className="flex flex-row justify-between w-full mb-4">
+ <button onClick={() => processImage('edge_detection')} className="bg-black text-white font-bold py-2 px-4 rounded w-full mr-2">
+ Edge Detection
+ </button>
+ <button onClick={() => processImage('color_inversion')} className="bg-black text-white font-bold py-2 px-4 rounded w-full ml-2">
+ Color Inversion
+ </button>
+ </div>
+ <img className='border-8 border-red-50' src={downloadUrl == '' ? "https://placehold.co/600x400" : downloadUrl} />
+ <button onClick={downloadImage} className="bg-black text-white font-bold py-2 px-4 rounded w-full">
+ Download
+ </button>
+ </div>
+ );
+};
+
+export default ImageProcessor;