| | <!DOCTYPE html> |
| | <html lang="en"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>Image Background Remover</title> |
| | <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script> |
| | <script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> |
| | <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&display=swap" rel="stylesheet"> |
| | <style> |
| | body { |
| | font-family: 'Playfair Display'; |
| | text-align:center; |
| | background-color: #f0f0f0; |
| | } |
| | |
| | @font-face { |
| | font-family: 'CustomFont'; |
| | src: url('coldnightforalligators.ttf') format('truetype'); |
| | } |
| | |
| | |
| | |
| | #text { |
| | position: absolute; |
| | top: 150px; |
| | transform: translateY(-50%); |
| | font-size: 2rem; |
| | z-index: 1; |
| | white-space: nowrap; |
| | |
| | font-family: 'CustomFont', Arial, sans-serif; |
| | |
| | margin: 0 auto; |
| | } |
| | |
| | |
| | .letter { |
| | transition: opacity 0.3s ease-out; |
| | } |
| | |
| | |
| | .slide-image { |
| | position: absolute; |
| | top: 150px; |
| | right: -100%; |
| | transform: translateY(-50%); |
| | animation: slide 45s linear infinite; |
| | |
| | } |
| | |
| | @keyframes slide { |
| | 0% { |
| | right: -60%; |
| | } |
| | 50% { |
| | right: 50%; |
| | } |
| | 100% { |
| | right: 100%; |
| | } |
| | } |
| | |
| | |
| | |
| | .day-mode { |
| | background-color: #f0f0f0; |
| | color: black; |
| | } |
| | |
| | |
| | .night-mode { |
| | background-color: #2e2e2e; |
| | color: white; |
| | } |
| | |
| | |
| | .night-mode-btn { |
| | position: fixed; |
| | top: 0px; |
| | right: 0px; |
| | background: linear-gradient(45deg, #ff7a7a, #ff1f5a); |
| | color: white; |
| | border: none; |
| | padding: 10px 20px; |
| | font-size: 16px; |
| | cursor: pointer; |
| | border-radius: 5px; |
| | z-index: 200; |
| | } |
| | |
| | .night-mode-btn:hover { |
| | background-color: #ff0044; |
| | } |
| | .container { |
| | max-width: 1000px; |
| | margin: 0 auto; |
| | } |
| | |
| | input[type="file"] { |
| | display: block; |
| | margin: 20px auto; |
| | } |
| | |
| | button { |
| | |
| | |
| | color: white; |
| | padding: 10px 20px; |
| | font-size: 16px; |
| | cursor: pointer; |
| | border-radius: 5px; |
| | margin: 10px; |
| | } |
| | |
| | button:hover { |
| | background-color: #45a049; |
| | } |
| | |
| | #processing, #success { |
| | display: none; |
| | margin: auto; |
| | } |
| | |
| | .grid-container { |
| | display: grid; |
| | grid-template-columns: repeat(3, 1fr); |
| | gap: 20px; |
| | margin-top: 20px; |
| | padding: 10px; |
| | } |
| | |
| | .grid-item { |
| | position: relative; |
| | background: white; |
| | border-radius: 10px; |
| | overflow: hidden; |
| | box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.1); |
| | transition: box-shadow 0.3s ease; |
| | } |
| | |
| | .grid-item img { |
| | width: 100%; |
| | height: auto; |
| | cursor: pointer; |
| | } |
| | |
| | .zoom-overlay { |
| | position: fixed; |
| | top: 0; |
| | left: 0; |
| | width: 100vw; |
| | height: 100vh; |
| | display: flex; |
| | justify-content: center; |
| | align-items: center; |
| | background-color: rgba(0, 0, 0, 0.7); |
| | z-index: 300; |
| | display: none; |
| | } |
| | |
| | .zoom-overlay img { |
| | max-height: 90%; |
| | max-width: 90%; |
| | transition: transform 0.3s ease; |
| | } |
| | |
| | .download-icon { |
| | position: absolute; |
| | top: 10px; |
| | right: 10px; |
| | background: rgba(255, 255, 255, 0.8); |
| | border-radius: 50%; |
| | padding: 10px; |
| | cursor: pointer; |
| | z-index: 400; |
| | transition: background 0.3s ease; |
| | } |
| | |
| | .download-icon:hover { |
| | background: rgba(255, 255, 255, 1); |
| | } |
| | </style> |
| | </head> |
| | <body> |
| | <button class="night-mode-btn" onclick="toggleDayNightMode()" style="position:sticky;top:0px;right:0px;">Switch to Night Mode</button> |
| | <div class="container"> |
| | |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | |
| | <div id="text"> |
| | <div> |
| | |
| | <span class="letter">I</span> |
| | <span class="letter">m</span> |
| | <span class="letter">a</span> |
| | <span class="letter">g</span> |
| | <span class="letter">e</span> |
| | <span> </span> |
| | |
| | <span class="letter">B</span> |
| | <span class="letter">a</span> |
| | <span class="letter">c</span> |
| | <span class="letter">k</span> |
| | <span class="letter">g</span> |
| | <span class="letter">r</span> |
| | <span class="letter">o</span> |
| | <span class="letter">u</span> |
| | <span class="letter">n</span> |
| | <span class="letter">d</span> |
| | |
| | </div> |
| | |
| | <br> |
| | |
| | <div> |
| | |
| | <span class="letter">R</span> |
| | <span class="letter">e</span> |
| | <span class="letter">m</span> |
| | <span class="letter">o</span> |
| | <span class="letter">v</span> |
| | <span class="letter">e</span> |
| | <span class="letter">r</span> |
| | |
| | </div> |
| | |
| | |
| | </div> |
| |
|
| | |
| | <img src="logo.gif" alt="Sliding Image" class="slide-image" style="width:200px;height:200px;"> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | |
| | <form id="bg-remove-form"> |
| | <label for="image" style="font-size:1.5rem;">Choose an image to remove background:</label> |
| | <input type="file" id="image" name="image" accept="image/*" required style="font-size:1.1rem;"> |
| | <button type="submit" style="background: linear-gradient(45deg, |
| | #fbd3e9, |
| | #bb377d);border: 2px solid #FF7171;">Remove Background</button> |
| | </form> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| | |
| | <button id="download-all" style="display: none;position:sticky;right:5px;background: linear-gradient(45deg, |
| | #c9ffbf, |
| | #ffafbd);border: 2px solid #90EE90;">Download All as ZIP</button> |
| |
|
| | |
| | <div id="processing" class="zoom-overlay"> |
| | <p style="color:orange;">Processing... Please wait</p> |
| | <img src="erasing.gif" alt="Processing GIF"> |
| | </div> |
| |
|
| | |
| | <div id="success" class="zoom-overlay" style="color:orange;"> |
| | <p>Success!</p> |
| | <img src="rbg.gif" alt="Success GIF"> |
| | |
| | </div> |
| | <br> |
| | <br> |
| | <br> |
| | <br> |
| |
|
| | |
| | <div class="grid-container" id="grid-container"> |
| | |
| | </div> |
| | </div> |
| |
|
| | |
| | <div class="zoom-overlay" id="zoom-overlay"> |
| | <a id="download-link" download> |
| | <div class="download-icon">⬇️</div> |
| | </a> |
| | <img src="" alt="Zoomed Image" id="zoom-image"> |
| | </div> |
| | <script> |
| | |
| | const letters = Array.from(document.querySelectorAll('.letter')).reverse(); |
| | const imageElement = document.querySelector('.slide-image'); |
| | const fadeOutDuration = 25 * 1000; |
| | const baseDelay = 1000; |
| | |
| | |
| | function fadeOutLetters() { |
| | letters.forEach((letter, index) => { |
| | setTimeout(() => { |
| | letter.style.opacity = 0; |
| | }, baseDelay * index); |
| | }); |
| | } |
| | |
| | |
| | function resetLetters() { |
| | letters.forEach((letter) => { |
| | letter.style.opacity = 1; |
| | }); |
| | } |
| | |
| | |
| | imageElement.addEventListener('animationiteration', () => { |
| | resetLetters(); |
| | setTimeout(fadeOutLetters, 1000); |
| | }); |
| | |
| | |
| | setTimeout(fadeOutLetters, 1000); |
| | </script> |
| |
|
| | <script> |
| | function toggleDayNightMode() { |
| | const body = document.body; |
| | const button = document.querySelector('.night-mode-btn'); |
| | |
| | if (body.classList.contains('day-mode')) { |
| | body.classList.remove('day-mode'); |
| | body.classList.add('night-mode'); |
| | button.textContent = "Switch to Day Mode"; |
| | } else { |
| | body.classList.remove('night-mode'); |
| | body.classList.add('day-mode'); |
| | button.textContent = "Switch to Night Mode"; |
| | } |
| | } |
| | document.getElementById('bg-remove-form').addEventListener('submit', async function (event) { |
| | event.preventDefault(); |
| | |
| | const imageInput = document.getElementById('image'); |
| | const processingDiv = document.getElementById('processing'); |
| | const successDiv = document.getElementById('success'); |
| | const gridContainer = document.getElementById('grid-container'); |
| | const zoomOverlay = document.getElementById('zoom-overlay'); |
| | const zoomImage = document.getElementById('zoom-image'); |
| | const downloadAllBtn = document.getElementById('download-all'); |
| | |
| | if (!imageInput.files.length) { |
| | alert("Please select an image file."); |
| | return; |
| | } |
| | |
| | |
| | processingDiv.style.display = 'block'; |
| | successDiv.style.display = 'none'; |
| | |
| | const formData = new FormData(); |
| | formData.append('image', imageInput.files[0]); |
| | |
| | try { |
| | const response = await fetch('https://geek7-flk.hf.space/remove_background', { |
| | method: 'POST', |
| | body: formData, |
| | }); |
| | |
| | if (!response.ok) { |
| | const errorData = await response.json(); |
| | alert(`Error: ${errorData.error}`); |
| | return; |
| | } |
| | |
| | const blob = await response.blob(); |
| | const imageUrl = URL.createObjectURL(blob); |
| | |
| | |
| | processingDiv.style.display = 'none'; |
| | successDiv.style.display = 'block'; |
| | |
| | |
| | const successImage = successDiv.querySelector('img'); |
| | successImage.addEventListener('click', () => { |
| | zoomOverlay.style.display = 'flex'; |
| | zoomImage.src = successImage.src; |
| | |
| | |
| | const downloadLink = document.getElementById('download-link'); |
| | downloadLink.href = successImage.src; |
| | }); |
| | |
| | |
| | setTimeout(() => { |
| | successDiv.style.display = 'none'; |
| | |
| | const gridItem = document.createElement('div'); |
| | gridItem.className = 'grid-item'; |
| | |
| | const imgElement = document.createElement('img'); |
| | imgElement.src = imageUrl; |
| | imgElement.alt = 'Processed Image'; |
| | |
| | |
| | imgElement.addEventListener('click', function () { |
| | zoomOverlay.style.display = 'flex'; |
| | zoomImage.src = imgElement.src; |
| | |
| | |
| | const downloadLink = document.getElementById('download-link'); |
| | downloadLink.href = imgElement.src; |
| | }); |
| | |
| | gridItem.appendChild(imgElement); |
| | gridContainer.prepend(gridItem); |
| | |
| | |
| | downloadAllBtn.style.display = 'block'; |
| | |
| | }, 3000); |
| | |
| | } catch (error) { |
| | console.error('Error:', error); |
| | alert("An error occurred while processing the image."); |
| | } finally { |
| | processingDiv.style.display = 'none'; |
| | } |
| | }); |
| | |
| | |
| | document.querySelector('#processing img').addEventListener('click', function () { |
| | zoomOverlay.style.display = 'flex'; |
| | zoomImage.src = this.src; |
| | |
| | |
| | const downloadLink = document.getElementById('download-link'); |
| | downloadLink.href = this.src; |
| | }); |
| | |
| | |
| | document.getElementById('zoom-overlay').addEventListener('click', function (e) { |
| | if (e.target === this) { |
| | this.style.display = 'none'; |
| | } |
| | }); |
| | |
| | |
| | document.getElementById('download-all').addEventListener('click', async function () { |
| | const gridImages = document.querySelectorAll('.grid-item img'); |
| | if (gridImages.length === 0) { |
| | alert("No images to download."); |
| | return; |
| | } |
| | |
| | const zip = new JSZip(); |
| | const imgFolder = zip.folder("images"); |
| | |
| | let count = 0; |
| | gridImages.forEach((img, index) => { |
| | fetch(img.src) |
| | .then(response => response.blob()) |
| | .then(blob => { |
| | const reader = new FileReader(); |
| | reader.onload = function () { |
| | imgFolder.file(`image_${index + 1}.png`, reader.result.split(",")[1], { base64: true }); |
| | count++; |
| | |
| | |
| | if (count === gridImages.length) { |
| | zip.generateAsync({ type: "blob" }) |
| | .then(content => { |
| | saveAs(content, "processed_images.zip"); |
| | }); |
| | } |
| | }; |
| | reader.readAsDataURL(blob); |
| | }) |
| | .catch(err => console.error(`Error fetching image ${index + 1}:`, err)); |
| | }); |
| | }); |
| | </script> |
| | </body> |
| | </html> |