Contents
hide
Html Code
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AI Image Enhancer - Free Online Photo Quality Tool</title> <meta name="description" content="Enhance image quality instantly with AI-powered editing. Improve brightness, contrast, sharpness with real-time preview. Perfect for social media and professional use."> <!-- Google Analytics (Replace GA-XXXXXX with your ID) --> <script async src="https://www.googletagmanager.com/gtag/js?id=GA-XXXXXX"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'GA-XXXXXX'); </script> <link rel="stylesheet" href="styles.css"> </head> <body> <div class="theme-toggle"> <button id="themeBtn">🌓 Toggle Theme</button> </div> <div class="container"> <!-- Top Ad --> <div class="ad-container"> [Your Ad Code Here] </div> <h1>AI Image Enhancer</h1> <div class="upload-section"> <input type="file" id="imageInput" accept="image/*" hidden> <button id="uploadBtn">📤 Upload Image</button> <button id="autoEnhanceBtn">🤖 Auto Enhance</button> <button id="downloadBtn">⏬ Download</button> </div> <div class="comparison-container"> <div class="image-container"> <img src="" alt="Original" id="originalImage"> <img src="" alt="Enhanced" id="enhancedImage"> <div class="slider"></div> </div> </div> <div class="controls"> <div class="control-group"> <button id="rotateLeftBtn">↺ Rotate Left</button> <button id="rotateRightBtn">↻ Rotate Right</button> </div> <div class="control-group"> <label>🔆 Brightness</label> <input type="range" id="brightness" min="-100" max="100" value="0"> </div> <div class="control-group"> <label>🌈 Contrast</label> <input type="range" id="contrast" min="-100" max="100" value="0"> </div> <div class="control-group"> <label>🎨 Saturation</label> <input type="range" id="saturation" min="-100" max="100" value="0"> </div> <div class="control-group"> <label>🔍 Sharpness</label> <input type="range" id="sharpness" min="0" max="100" value="0"> </div> <div class="control-group"> <label>📁 Format</label> <select id="formatSelect"> <option value="png">PNG</option> <option value="jpeg">JPEG</option> </select> </div> <button id="resetBtn">🔄 Reset All</button> </div> <!-- Middle Ad --> <div class="ad-container"> [Your Ad Code Here] </div> <!-- SEO Article --> <article class="seo-content"> <h2>Free Online Image Quality Enhancement Guide</h2> <section> <h3>Transform Your Photos Instantly</h3> <p>Our AI-powered tool helps you enhance images in seconds. Perfect for:</p> <ul> <li>Social media content creation</li> <li>E-commerce product photos</li> <li>Professional photography editing</li> <li>Restoring old pictures</li> </ul> </section> <section> <h3>How It Works</h3> <div class="steps"> <div class="step"> <div class="step-number">1</div> <h4>Upload</h4> <p>Select any JPG/PNG image from your device</p> </div> <div class="step"> <div class="step-number">2</div> <h4>Enhance</h4> <p>Use AI enhancement or manual adjustments</p> </div> <div class="step"> <div class="step-number">3</div> <h4>Download</h4> <p>Get HD-quality results instantly</p> </div> </div> </section> <!-- More article sections... --> </article> <!-- Bottom Ad --> <div class="ad-container sticky-ad"> [Your Ad Code Here] </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/4.5.0/fabric.min.js"></script> <script src="script.js"></script> </body> </html>
CSS Code
:root { --primary-color: #00ff9d; --background-color: #1a1a1a; --text-color: #ffffff; --control-bg: #2d2d2d; --border-color: #444; } [data-theme="light"] { --background-color: #f5f5f5; --text-color: #1a1a1a; --control-bg: #ffffff; --border-color: #ddd; --primary-color: #007bff; } * { margin: 0; padding: 0; box-sizing: border-box; transition: 0.3s all; } body { background: var(--background-color); color: var(--text-color); font-family: 'Arial', sans-serif; line-height: 1.6; } .container { max-width: 1200px; margin: 0 auto; padding: 2rem; } h1 { text-align: center; margin: 2rem 0; color: var(--primary-color); font-size: 2.5rem; } .upload-section { display: flex; gap: 1rem; margin: 2rem 0; justify-content: center; flex-wrap: wrap; } button { padding: 1rem 2rem; background: var(--primary-color); border: none; border-radius: 8px; cursor: pointer; font-weight: bold; color: var(--background-color); display: flex; align-items: center; gap: 0.5rem; } .comparison-container { position: relative; width: 100%; max-width: 800px; margin: 2rem auto; border-radius: 15px; overflow: hidden; box-shadow: 0 0 30px rgba(0, 255, 157, 0.2); } .image-container { position: relative; width: 100%; height: 60vh; min-height: 400px; } #originalImage, #enhancedImage { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: contain; } .slider { position: absolute; top: 0; left: 50%; transform: translateX(-50%); width: 4px; height: 100%; background: var(--primary-color); cursor: col-resize; z-index: 10; } .controls { background: var(--control-bg); padding: 2rem; border-radius: 15px; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 2rem; margin: 2rem 0; } .seo-content { background: var(--control-bg); padding: 2rem; border-radius: 15px; margin: 3rem 0; } .seo-content h2 { color: var(--primary-color); border-bottom: 2px solid var(--primary-color); padding-bottom: 1rem; margin-bottom: 2rem; } .ad-container { background: var(--control-bg); padding: 1.5rem; border-radius: 10px; margin: 2rem 0; text-align: center; border: 1px solid var(--border-color); } .sticky-ad { position: sticky; bottom: 20px; background: var(--primary-color); color: var(--background-color); } @media (max-width: 768px) { .container { padding: 1rem; } .image-container { height: 50vh; } }
Javascript Code
document.addEventListener('DOMContentLoaded', () => { // Theme Toggle const themeBtn = document.getElementById('themeBtn'); const body = document.body; function toggleTheme() { const currentTheme = body.getAttribute('data-theme') || 'dark'; const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; body.setAttribute('data-theme', newTheme); localStorage.setItem('theme', newTheme); } const savedTheme = localStorage.getItem('theme'); if (savedTheme) body.setAttribute('data-theme', savedTheme); themeBtn.addEventListener('click', toggleTheme); // Image Processor const elements = { imageInput: document.getElementById('imageInput'), uploadBtn: document.getElementById('uploadBtn'), downloadBtn: document.getElementById('downloadBtn'), autoEnhanceBtn: document.getElementById('autoEnhanceBtn'), originalImage: document.getElementById('originalImage'), enhancedImage: document.getElementById('enhancedImage'), brightness: document.getElementById('brightness'), contrast: document.getElementById('contrast'), saturation: document.getElementById('saturation'), sharpness: document.getElementById('sharpness'), resetBtn: document.getElementById('resetBtn'), slider: document.querySelector('.slider'), rotateLeftBtn: document.getElementById('rotateLeftBtn'), rotateRightBtn: document.getElementById('rotateRightBtn'), formatSelect: document.getElementById('formatSelect') }; let state = { currentImage: null, enhancedCanvas: null, isDragging: false, rotationAngle: 0 }; // Event Listeners elements.uploadBtn.addEventListener('click', () => elements.imageInput.click()); elements.imageInput.addEventListener('change', handleImageUpload); elements.slider.addEventListener('mousedown', startDragging); document.addEventListener('mousemove', handleDragging); document.addEventListener('mouseup', stopDragging); elements.resetBtn.addEventListener('click', resetControls); elements.autoEnhanceBtn.addEventListener('click', autoEnhance); elements.rotateLeftBtn.addEventListener('click', () => rotateImage(-90)); elements.rotateRightBtn.addEventListener('click', () => rotateImage(90)); elements.downloadBtn.addEventListener('click', downloadImage); [elements.brightness, elements.contrast, elements.saturation, elements.sharpness] .forEach(control => control.addEventListener('input', updateImage)); function handleImageUpload(e) { const file = e.target.files[0]; if (!file) return; const reader = new FileReader(); reader.onload = (event) => { elements.originalImage.onload = () => { initializeImageProcessing(event.target.result); }; elements.originalImage.src = event.target.result; elements.enhancedImage.src = event.target.result; }; reader.readAsDataURL(file); } function initializeImageProcessing(imageSrc) { state.enhancedCanvas = new fabric.Canvas(null, { width: elements.originalImage.naturalWidth, height: elements.originalImage.naturalHeight }); fabric.Image.fromURL(imageSrc, (img) => { state.currentImage = img; state.enhancedCanvas.add(state.currentImage); updateImage(); }); } function updateImage() { if (!state.currentImage) return; const filters = [ new fabric.Image.filters.Brightness({ brightness: elements.brightness.value / 100 }), new fabric.Image.filters.Contrast({ contrast: elements.contrast.value / 100 }), new fabric.Image.filters.Saturation({ saturation: elements.saturation.value }), new fabric.Image.filters.Convolute({ matrix: [0, -1, 0, -1, 5, -1, 0, -1, 0], opacity: elements.sharpness.value / 100 }) ]; state.currentImage.filters = filters; state.currentImage.applyFilters(); state.enhancedCanvas.renderAll(); elements.enhancedImage.src = state.enhancedCanvas.toDataURL(); } function autoEnhance() { elements.brightness.value = 15; elements.contrast.value = 20; elements.saturation.value = 25; elements.sharpness.value = 30; updateImage(); } function rotateImage(degrees) { state.rotationAngle += degrees; state.currentImage.angle = state.rotationAngle; state.enhancedCanvas.renderAll(); elements.enhancedImage.src = state.enhancedCanvas.toDataURL(); } function downloadImage() { if (!state.enhancedCanvas) return; const tempCanvas = document.createElement('canvas'); const ctx = tempCanvas.getContext('2d'); const scaleFactor = 2; tempCanvas.width = state.enhancedCanvas.width * scaleFactor; tempCanvas.height = state.enhancedCanvas.height * scaleFactor; ctx.scale(scaleFactor, scaleFactor); ctx.drawImage(state.enhancedCanvas.getElement(), 0, 0); const link = document.createElement('a'); link.download = `enhanced-image.${elements.formatSelect.value}`; link.href = tempCanvas.toDataURL(`image/${elements.formatSelect.value}`, 1.0); link.click(); } function resetControls() { elements.brightness.value = 0; elements.contrast.value = 0; elements.saturation.value = 0; elements.sharpness.value = 0; state.rotationAngle = 0; updateImage(); } function startDragging(e) { state.isDragging = true; document.body.style.cursor = 'col-resize'; } function handleDragging(e) { if (!state.isDragging) return; const rect = elements.enhancedImage.getBoundingClientRect(); const x = e.clientX - rect.left; const percentage = (x / rect.width) * 100; const pos = Math.max(0, Math.min(100, percentage)); elements.enhancedImage.style.clipPath = `inset(0 ${100 - pos}% 0 0)`; elements.slider.style.left = `${pos}%`; } function stopDragging() { state.isDragging = false; document.body.style.cursor = 'default'; } });