<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GlowDP - Animated Profile Picture Creator</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
:root {
--primary: #8a2be2;
--primary-light: #9370db;
--accent: #00ffff;
--accent-pink: #ff00ff;
--dark: #121212;
--light: #ffffff;
--gray: #f5f5f5;
--text: #333333;
}
body {
background: linear-gradient(135deg, #0f0c29, #302b63, #24243e);
color: var(--light);
line-height: 1.6;
min-height: 100vh;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
.container {
width: 100%;
max-width: 900px;
background: rgba(18, 18, 18, 0.8);
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
overflow: hidden;
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
}
header {
background: linear-gradient(135deg, var(--primary), var(--primary-light));
color: white;
padding: 25px;
text-align: center;
position: relative;
overflow: hidden;
}
.logo {
display: flex;
align-items: center;
justify-content: center;
gap: 15px;
margin-bottom: 15px;
z-index: 2;
position: relative;
}
.logo-icon {
background: white;
width: 50px;
height: 50px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: var(--primary);
font-size: 24px;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
h1 {
font-size: 2.5rem;
margin-bottom: 10px;
text-shadow: 0 0 10px rgba(138, 43, 226, 0.7);
}
.tagline {
font-size: 1.1rem;
opacity: 0.9;
}
.particles {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
}
.particle {
position: absolute;
width: 4px;
height: 4px;
background: rgba(255, 255, 255, 0.7);
border-radius: 50%;
animation: float 6s infinite;
}
@keyframes float {
0% { transform: translateY(0) translateX(0); opacity: 0; }
50% { opacity: 1; }
100% { transform: translateY(-100px) translateX(20px); opacity: 0; }
}
.main-content {
padding: 30px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
}
@media (max-width: 768px) {
.main-content {
grid-template-columns: 1fr;
}
}
.upload-section {
background: rgba(255, 255, 255, 0.05);
border-radius: 15px;
padding: 25px;
text-align: center;
}
h2 {
font-size: 1.5rem;
margin-bottom: 20px;
color: var(--accent);
display: flex;
align-items: center;
gap: 10px;
justify-content: center;
}
.upload-area {
border: 3px dashed rgba(255, 255, 255, 0.3);
border-radius: 15px;
padding: 40px 20px;
text-align: center;
margin-bottom: 20px;
transition: all 0.3s ease;
cursor: pointer;
position: relative;
}
.upload-area:hover {
border-color: var(--accent);
box-shadow: 0 0 20px rgba(0, 255, 255, 0.3);
}
.upload-icon {
font-size: 50px;
color: var(--accent);
margin-bottom: 15px;
text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
}
.upload-text h3 {
font-size: 1.5rem;
margin-bottom: 10px;
}
.upload-text p {
color: rgba(255, 255, 255, 0.7);
}
#file-input {
display: none;
}
.preview-section {
background: rgba(255, 255, 255, 0.05);
border-radius: 15px;
padding: 25px;
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
}
.preview-container {
width: 250px;
height: 250px;
border-radius: 50%;
margin: 20px auto;
position: relative;
overflow: hidden;
box-shadow: 0 0 30px rgba(138, 43, 226, 0.5);
animation: glow 3s infinite alternate;
}
@keyframes glow {
0% { box-shadow: 0 0 20px rgba(138, 43, 226, 0.5); }
100% { box-shadow: 0 0 40px rgba(0, 255, 255, 0.7), 0 0 60px rgba(138, 43, 226, 0.7); }
}
.preview-image {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
.default-avatar {
width: 100%;
height: 100%;
background: linear-gradient(135deg, var(--primary), var(--primary-light));
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 80px;
}
.frame {
position: absolute;
top: -10px;
left: -10px;
right: -10px;
bottom: -10px;
border: 3px solid var(--accent);
border-radius: 50%;
pointer-events: none;
animation: rotate 10s infinite linear;
}
@keyframes rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.frame::before {
content: '';
position: absolute;
top: -5px;
left: -5px;
right: -5px;
bottom: -5px;
border: 3px solid var(--accent-pink);
border-radius: 50%;
opacity: 0.7;
animation: rotateReverse 8s infinite linear;
}
@keyframes rotateReverse {
0% { transform: rotate(0deg); }
100% { transform: rotate(-360deg); }
}
.options-section {
grid-column: 1 / -1;
background: rgba(255, 255, 255, 0.05);
border-radius: 15px;
padding: 25px;
margin-top: 20px;
}
.options-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
}
.option {
background: rgba(255, 255, 255, 0.1);
padding: 20px;
border-radius: 10px;
text-align: center;
transition: all 0.3s;
cursor: pointer;
}
.option:hover {
background: rgba(255, 255, 255, 0.15);
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
}
.option.active {
background: rgba(138, 43, 226, 0.3);
border: 2px solid var(--accent);
}
.option-icon {
font-size: 30px;
margin-bottom: 15px;
color: var(--accent);
}
.option-name {
font-weight: 600;
margin-bottom: 10px;
}
.option-desc {
font-size: 14px;
opacity: 0.8;
}
.action-buttons {
display: flex;
gap: 15px;
justify-content: center;
margin-top: 30px;
}
.action-btn {
padding: 15px 30px;
border: none;
border-radius: 50px;
background: linear-gradient(135deg, var(--primary), var(--primary-light));
color: white;
font-weight: 600;
cursor: pointer;
transition: all 0.3s;
display: flex;
align-items: center;
gap: 8px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
}
.action-btn:hover {
transform: translateY(-3px);
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3);
}
.action-btn:active {
transform: translateY(0);
}
.download-btn {
background: linear-gradient(135deg, var(--accent), #00bcd4);
}
.share-btn {
background: linear-gradient(135deg, var(--accent-pink), #e91e63);
}
footer {
text-align: center;
padding: 20px;
color: rgba(255, 255, 255, 0.7);
margin-top: 20px;
}
/* Animation for the demo image */
.demo-image {
animation: floatImage 4s ease-in-out infinite;
}
@keyframes floatImage {
0% { transform: translateY(0); }
50% { transform: translateY(-10px); }
100% { transform: translateY(0); }
}
</style>
</head>
<body>
<div class="container">
<header>
<div class="particles" id="particles"></div>
<div class="logo">
<div class="logo-icon">
<i class="fas fa-camera"></i>
</div>
<h1>GlowDP Creator</h1>
</div>
<p class="tagline">Create stunning animated profile pictures with glowing effects</p>
</header>
<div class="main-content">
<div class="upload-section">
<h2><i class="fas fa-upload"></i> Upload Your Photo</h2>
<div class="upload-area" id="upload-area">
<div class="upload-icon">
<i class="fas fa-cloud-upload-alt"></i>
</div>
<div class="upload-text">
<h3>Drag & Drop</h3>
<p>Your photo here or click to browse</p>
</div>
<input type="file" id="file-input" accept="image/*">
</div>
<p>Supported formats: JPG, PNG, GIF</p>
</div>
<div class="preview-section">
<h2><i class="fas fa-eye"></i> Preview</h2>
<div class="preview-container">
<div class="default-avatar">
<i class="fas fa-user"></i>
</div>
<img class="preview-image" id="preview-image" style="display: none;" alt="Your profile picture">
<div class="frame"></div>
</div>
<div class="action-buttons">
<button class="action-btn download-btn" id="download-btn">
<i class="fas fa-download"></i> Download DP
</button>
<button class="action-btn share-btn" id="share-btn">
<i class="fas fa-share-alt"></i> Share
</button>
</div>
</div>
<div class="options-section">
<h2><i class="fas fa-magic"></i> Animation Effects</h2>
<div class="options-grid">
<div class="option active">
<div class="option-icon">
<i class="fas fa-circle"></i>
</div>
<div class="option-name">Neon Glow</div>
<div class="option-desc">Vibrant neon border with pulsating effect</div>
</div>
<div class="option">
<div class="option-icon">
<i class="fas fa-fire"></i>
</div>
<div class="option-name">Particle Fire</div>
<div class="option-desc">Animated particles around your picture</div>
</div>
<div class="option">
<div class="option-icon">
<i class="fas fa-snowflake"></i>
</div>
<div class="option-name">Sparkle Effect</div>
<div class="option-desc">Shining sparkles around your profile picture</div>
</div>
<div class="option">
<div class="option-icon">
<i class="fas fa-palette"></i>
</div>
<div class="option-name">Color Shift</div>
<div class="option-desc">Gradually changing background colors</div>
</div>
</div>
</div>
</div>
<footer>
<p>GlowDP Creator © 2023 - Create amazing profile pictures for Instagram, WhatsApp, and more</p>
</footer>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const fileInput = document.getElementById('file-input');
const uploadArea = document.getElementById('upload-area');
const previewImage = document.getElementById('preview-image');
const defaultAvatar = document.querySelector('.default-avatar');
const downloadBtn = document.getElementById('download-btn');
const shareBtn = document.getElementById('share-btn');
const particlesContainer = document.getElementById('particles');
// Create floating particles
function createParticles() {
for (let i = 0; i < 30; i++) {
const particle = document.createElement('div');
particle.className = 'particle';
particle.style.left = Math.random() * 100 + '%';
particle.style.top = Math.random() * 100 + '%';
particle.style.animationDelay = Math.random() * 5 + 's';
particle.style.background = i % 3 === 0 ? 'rgba(0, 255, 255, 0.7)' :
i % 3 === 1 ? 'rgba(138, 43, 226, 0.7)' :
'rgba(255, 0, 255, 0.7)';
particlesContainer.appendChild(particle);
}
}
createParticles();
// Upload area functionality
uploadArea.addEventListener('click', function() {
fileInput.click();
});
uploadArea.addEventListener('dragover', function(e) {
e.preventDefault();
uploadArea.style.borderColor = 'var(--accent)';
uploadArea.style.backgroundColor = 'rgba(0, 255, 255, 0.1)';
});
uploadArea.addEventListener('dragleave', function() {
uploadArea.style.borderColor = 'rgba(255, 255, 255, 0.3)';
uploadArea.style.backgroundColor = 'transparent';
});
uploadArea.addEventListener('drop', function(e) {
e.preventDefault();
uploadArea.style.borderColor = 'rgba(255, 255, 255, 0.3)';
uploadArea.style.backgroundColor = 'transparent';
if (e.dataTransfer.files.length > 0) {
fileInput.files = e.dataTransfer.files;
handleImageUpload(e.dataTransfer.files[0]);
}
});
fileInput.addEventListener('change', function() {
if (fileInput.files.length > 0) {
handleImageUpload(fileInput.files[0]);
}
});
// Handle image upload
function handleImageUpload(file) {
if (!file.type.match('image.*')) {
alert('Please upload an image file');
return;
}
const reader = new FileReader();
reader.onload = function(e) {
previewImage.src = e.target.result;
previewImage.style.display = 'block';
defaultAvatar.style.display = 'none';
// Enable download button
downloadBtn.disabled = false;
shareBtn.disabled = false;
};
reader.readAsDataURL(file);
}
// Download functionality
downloadBtn.addEventListener('click', function() {
if (!previewImage.src || previewImage.src === window.location.href) {
alert('Please upload an image first');
return;
}
// In a real application, this would use canvas to draw the image with effects
// For this demo, we'll just provide a download link for the original image
const a = document.createElement('a');
a.href = previewImage.src;
a.download = 'glow-dp.png';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
// Show confirmation
alert('Your glowing DP is downloading! In a real app, it would include all effects.');
});
// Share functionality
shareBtn.addEventListener('click', function() {
if (!previewImage.src || previewImage.src === window.location.href) {
alert('Please upload an image first');
return;
}
alert('Sharing functionality would be implemented in a complete version. This would allow sharing to Instagram, WhatsApp, etc.');
});
// Option selection
const options = document.querySelectorAll('.option');
options.forEach(option => {
option.addEventListener('click', function() {
options.forEach(opt => opt.classList.remove('active'));
this.classList.add('active');
// In a real app, this would change the effect applied to the image
alert('Effect changed to: ' + this.querySelector('.option-name').textContent);
});
});
});
</script>
</body>
</html>
0 टिप्पणियाँ