आधार कार्ड क्रोप साइज ऑनलाइन - डॉक्यूमेंट क्रॉपर प्रो | मुफ्त आधार कार्ड क्रॉपिंग टूल
`);
printWindow.document.close();
});// सब कुछ रीसेट करें - आधार कार्ड
resetBtn.addEventListener('click', function() {
if (confirm('क्या आप वाकई सब कुछ रीसेट करना चाहते हैं? सभी क्रॉप की गई इमेज, रोटेशन और एडजस्टमेंट खो जाएंगे।')) {
originalImage = new Image();
rotatedImage = new Image();
frontImageData = null;
backImageData = null;
frontOriginalCanvas = null;
backOriginalCanvas = null;
frontTempCanvas = null;
backTempCanvas = null;
currentSelection = null;
imageLoaded = false;
currentRotation = 0;
canvas.width = 0;
canvas.height = 0;
canvasContainer.style.display = 'none';
selectionBox.style.display = 'none';
selectionGuide.style.display = 'none';
selectionInfo.style.display = 'none';
rotationControls.style.display = 'none';
frontControls.style.display = 'none';
backControls.style.display = 'none';
frontRealtimeIndicator.style.display = 'none';
backRealtimeIndicator.style.display = 'none';
fileInput.value = '';
loadingSpinner.style.display = 'none';
rotationSlider.value = 0;
rotationValue.textContent = '0°';
frontBrightness.value = 0;
frontContrast.value = 0;
frontBrightnessValue.textContent = '0';
frontContrastValue.textContent = '0';
backBrightness.value = 0;
backContrast.value = 0;
backBrightnessValue.textContent = '0';
backContrastValue.textContent = '0';
frontPreview.src = "data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='250' viewBox='0 0 400 250'%3E%3Crect width='400' height='250' fill='%23f0f0f0'/%3E%3Ctext x='50%25' y='50%25' font-family='Arial' font-size='16' text-anchor='middle' fill='%23999'%3Eयहाँ आगे की तरफ दिखाई देगी%3C/text%3E%3C/svg%3E";
backPreview.src = "data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='250' viewBox='0 0 400 250'%3E%3Crect width='400' height='250' fill='%23f0f0f0'/%3E%3Ctext x='50%25' y='50%25' font-family='Arial' font-size='16' text-anchor='middle' fill='%23999'%3Eयहाँ पीछे की तरफ दिखाई देगी%3C/text%3E%3C/svg%3E";
cropFrontBtn.disabled = true;
cropBackBtn.disabled = true;
printBtn.disabled = true;
showStatus('शुरू करने के लिए अपना आधार कार्ड इमेज या PDF अपलोड करें', 'info');
setTimeout(() => {
smoothScrollTo(uploadSection, 50);
}, 300);
}
});// ==================== इवेंट लिस्टेनर्स - सिंगल पेज टूल ====================
// क्विक रोटेशन बटन इवेंट्स - सिंगल पेज
rotateLeftBtnSingle.addEventListener('click', async function() {
const newAngle = (currentRotationSingle - 90 + 360) % 360;
await updateRotationSingle(newAngle);
showStatus(`इमेज 90° बाईं ओर घुमाई गई। वर्तमान रोटेशन: ${newAngle}°`, 'success', true);
});rotateRightBtnSingle.addEventListener('click', async function() {
const newAngle = (currentRotationSingle + 90) % 360;
await updateRotationSingle(newAngle);
showStatus(`इमेज 90° दाईं ओर घुमाई गई। वर्तमान रोटेशन: ${newAngle}°`, 'success', true);
});resetRotationBtnSingle.addEventListener('click', async function() {
await updateRotationSingle(0);
showStatus('रोटेशन रीसेट किया गया। मूल स्थिति में वापस।', 'info', true);
});// रोटेशन स्लाइडर इवेंट - सिंगल पेज
rotationSliderSingle.addEventListener('input', function() {
const angle = parseInt(this.value);
rotationValueSingle.textContent = `${angle}°`;
rotationValueSingle.classList.add('changing');
debounce(async () => {
await updateRotationSingle(angle);
rotationValueSingle.classList.remove('changing');
}, 100);
});// अगले स्टेप बटन - सिंगल पेज
nextStepBtnSingle.addEventListener('click', function() {
if (currentRotationSingle !== 0) {
showStatus(`रोटेशन पूरा (${currentRotationSingle}°), अब आप क्रॉप कर सकते हैं। इमेज पर क्लिक करें और ड्रैग करें।`, 'success', true);
} else {
showStatus('रोटेशन पूरा, अब आप क्रॉप कर सकते हैं। इमेज पर क्लिक करें और ड्रैग करें।', 'success', true);
}
selectionGuideSingle.style.display = 'block';
cropSingleBtn.disabled = false;
setTimeout(() => {
smoothScrollTo(canvasContainerSingle, 50);
}, 300);
});// स्लाइडर वैल्यू डिस्प्ले अपडेट करें - सिंगल पेज
singleBrightness.addEventListener('input', function() {
const value = parseInt(this.value);
singleBrightnessValue.textContent = value;
singleBrightnessValue.classList.add('changing');
singleRealtimeIndicator.style.display = 'block';
debounce(() => {
applyRealtimePreviewSingle();
singleBrightnessValue.classList.remove('changing');
}, 50);
});singleContrast.addEventListener('input', function() {
const value = parseInt(this.value);
singleContrastValue.textContent = value;
singleContrastValue.classList.add('changing');
singleRealtimeIndicator.style.display = 'block';
debounce(() => {
applyRealtimePreviewSingle();
singleContrastValue.classList.remove('changing');
}, 50);
});// सिंगल पेज इमेज के बदलाव सेव करें
saveSingleBtn.addEventListener('click', function() {
if (!singleOriginalCanvas) return;
const brightness = parseInt(singleBrightness.value);
const contrast = parseInt(singleContrast.value);
const adjustedDataUrl = applyBrightnessContrast(singleOriginalCanvas, brightness, contrast);
singlePreview.src = adjustedDataUrl;
singleImageData = adjustedDataUrl;
singleRealtimeIndicator.style.display = 'none';
showStatus('सिंगल पेज के बदलाव सेव किए गए! ✓', 'success', true);
printSingleBtn.disabled = false;
});// सिंगल पेज इमेज एडजस्टमेंट रीसेट करें
resetSingleBtn.addEventListener('click', function() {
if (!singleOriginalCanvas) return;
singleBrightness.value = 0;
singleContrast.value = 0;
singleBrightnessValue.textContent = '0';
singleContrastValue.textContent = '0';
const originalDataUrl = singleOriginalCanvas.toDataURL('image/jpeg', 0.95);
singlePreview.src = originalDataUrl;
singleImageData = originalDataUrl;
singleRealtimeIndicator.style.display = 'none';
showStatus('सिंगल पेज एडजस्टमेंट रीसेट किए गए!', 'info', true);
});// इमेज या PDF लोड करें - सिंगल पेज
fileInputSingle.addEventListener('change', async function(e) {
const file = e.target.files[0];
if (!file) return;
const isImage = file.type.startsWith('image/');
const isPDF = file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf');
if (!isImage && !isPDF) {
alert('कृपया इमेज फाइल (JPG, PNG) या PDF फाइल चुनें');
return;
}
if (file.size > 10 * 1024 * 1024) {
alert('फाइल साइज 10MB से कम होनी चाहिए');
return;
}
try {
let imageDataUrl;
if (isPDF) {
imageDataUrl = await processPDF(file, true);
showStatus('PDF सफलतापूर्वक प्रोसेस हुआ! पहले इमेज घुमाएं/सीधा करें।', 'success', true);
} else {
const reader = new FileReader();
imageDataUrl = await new Promise((resolve, reject) => {
reader.onload = function(event) {
resolve(event.target.result);
};
reader.onerror = function() {
reject(new Error('इमेज फाइल पढ़ने में त्रुटि'));
};
reader.readAsDataURL(file);
});
showStatus('इमेज लोड हुआ! पहले इमेज घुमाएं/सीधा करें।', 'success', true);
}
originalImageSingle.onload = async function() {
rotationControlsSingle.style.display = 'block';
canvasContainerSingle.style.display = 'block';
rotatedImageSingle = originalImageSingle;
currentRotationSingle = 0;
const maxWidth = Math.min(800, rotatedImageSingle.width, window.innerWidth - 100);
scaleSingle = maxWidth / rotatedImageSingle.width;
canvasSingle.width = maxWidth;
canvasSingle.height = rotatedImageSingle.height * scaleSingle;
drawRotatedImageSingle();
selectionGuideSingle.style.display = 'none';
selectionInfoSingle.style.display = 'none';
cropSingleBtn.disabled = true;
imageLoadedSingle = true;
showStatus('अब इमेज घुमाएं/सीधा करें। Quick Rotate बटन या स्लाइडर का उपयोग करें।', 'info', true);
setTimeout(() => {
smoothScrollTo(rotationControlsSingle, 50);
}, 300);
};
originalImageSingle.onerror = function() {
alert('इमेज लोड करने में त्रुटि। कृपया पुनः प्रयास करें।');
showStatus('इमेज लोड करने में त्रुटि। कृपया पुनः प्रयास करें।', 'error', true);
};
originalImageSingle.src = imageDataUrl;
} catch (error) {
console.error('फाइल प्रोसेसिंग त्रुटि:', error);
alert('फाइल प्रोसेस करने में त्रुटि। कृपया पुनः प्रयास करें।');
showStatus('फाइल प्रोसेस करने में त्रुटि। कृपया पुनः प्रयास करें।', 'error', true);
loadingSpinnerSingle.style.display = 'none';
}
});// माउस इवेंट्स - सिंगल पेज
canvasSingle.addEventListener('mousedown', startSelectionSingle);
canvasSingle.addEventListener('mousemove', drawSelectionSingle);
canvasSingle.addEventListener('mouseup', endSelectionSingle);// टच इवेंट्स - सिंगल पेज
canvasSingle.addEventListener('touchstart', function(e) {
e.preventDefault();
if (e.touches.length === 1) {
const touch = e.touches[0];
const rect = canvasSingle.getBoundingClientRect();
startSelectionSingle({
clientX: touch.clientX,
clientY: touch.clientY,
rect: rect
});
}
});canvasSingle.addEventListener('touchmove', function(e) {
e.preventDefault();
if (e.touches.length === 1) {
const touch = e.touches[0];
const rect = canvasSingle.getBoundingClientRect();
drawSelectionSingle({
clientX: touch.clientX,
clientY: touch.clientY,
rect: rect
});
}
});canvasSingle.addEventListener('touchend', endSelectionSingle);// क्रॉप पेज बटन - सिंगल पेज
cropSingleBtn.addEventListener('click', function() {
if (!imageLoadedSingle) {
alert('कृपया पहले एक इमेज या PDF अपलोड करें');
return;
}
const singleCanvas = cropImageSingle();
if (singleCanvas) {
singleOriginalCanvas = singleCanvas;
singleImageData = singleCanvas.toDataURL('image/jpeg', 0.95);
singlePreview.src = singleImageData;
singleControls.style.display = 'block';
singleBrightness.value = 0;
singleContrast.value = 0;
singleBrightnessValue.textContent = '0';
singleContrastValue.textContent = '0';
selectionBoxSingle.style.display = 'none';
currentSelectionSingle = null;
selectionInfoSingle.style.display = 'none';
selectionGuideSingle.textContent = 'पेज क्रॉप हो गया! अब चमक/कंट्रास्ट एडजस्ट करें और प्रिंट करें।';
selectionGuideSingle.style.display = 'block';
showStatus('पेज क्रॉप हो गया! ✓ अब चमक/कंट्रास्ट एडजस्ट करें और प्रिंट करें।', 'success', true);
printSingleBtn.disabled = false;
setTimeout(() => {
smoothScrollTo(previewContainerSingle, 50);
}, 300);
}
});// प्रिंट पेज बटन - सिंगल पेज
printSingleBtn.addEventListener('click', function() {
if (!singleImageData) {
alert('कृपया पहले पेज क्रॉप करें');
return;
}
const printWindow = window.open('', '_blank');
printWindow.document.write(`
सिंगल पेज प्रिंट - डॉक्यूमेंट क्रॉपर प्रो

`);
printWindow.document.close();
});// सब कुछ रीसेट करें - सिंगल पेज
resetSinglePageBtn.addEventListener('click', function() {
if (confirm('क्या आप वाकई सब कुछ रीसेट करना चाहते हैं? सभी क्रॉप की गई इमेज, रोटेशन और एडजस्टमेंट खो जाएंगे।')) {
originalImageSingle = new Image();
rotatedImageSingle = new Image();
singleImageData = null;
singleOriginalCanvas = null;
singleTempCanvas = null;
currentSelectionSingle = null;
imageLoadedSingle = false;
currentRotationSingle = 0;
canvasSingle.width = 0;
canvasSingle.height = 0;
canvasContainerSingle.style.display = 'none';
selectionBoxSingle.style.display = 'none';
selectionGuideSingle.style.display = 'none';
selectionInfoSingle.style.display = 'none';
rotationControlsSingle.style.display = 'none';
singleControls.style.display = 'none';
singleRealtimeIndicator.style.display = 'none';
fileInputSingle.value = '';
loadingSpinnerSingle.style.display = 'none';
rotationSliderSingle.value = 0;
rotationValueSingle.textContent = '0°';
singleBrightness.value = 0;
singleContrast.value = 0;
singleBrightnessValue.textContent = '0';
singleContrastValue.textContent = '0';
singlePreview.src = "data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='250' viewBox='0 0 400 250'%3E%3Crect width='400' height='250' fill='%23f0f0f0'/%3E%3Ctext x='50%25' y='50%25' font-family='Arial' font-size='16' text-anchor='middle' fill='%23999'%3Eयहाँ क्रॉप किया गया पेज दिखाई देगा%3C/text%3E%3C/svg%3E";
cropSingleBtn.disabled = true;
printSingleBtn.disabled = true;
showStatus('शुरू करने के लिए अपना सिंगल पेज इमेज या PDF अपलोड करें', 'info', true);
setTimeout(() => {
smoothScrollTo(uploadSectionSingle, 50);
}, 300);
}
});// ==================== कीबोर्ड शॉर्टकट ====================
document.addEventListener('keydown', function(e) {
const activeTab = document.querySelector('.tab-btn.active').getAttribute('data-tab');
if (activeTab === 'aadhaar') {
// आधार कार्ड टूल शॉर्टकट
if (e.key === 'f' || e.key === 'F') {
e.preventDefault();
if (!cropFrontBtn.disabled) cropFrontBtn.click();
}
else if (e.key === 'b' || e.key === 'B') {
e.preventDefault();
if (!cropBackBtn.disabled) cropBackBtn.click();
}
else if (e.key === 'p' || e.key === 'P') {
e.preventDefault();
if (!printBtn.disabled) printBtn.click();
}
else if (e.key === 'Escape') {
selectionBox.style.display = 'none';
currentSelection = null;
isDrawing = false;
selectionInfo.style.display = 'none';
if (imageLoaded) {
selectionGuide.style.display = 'block';
selectionGuide.textContent = 'आधार कार्ड क्षेत्र चुनने के लिए नीचे दी गई इमेज पर क्लिक करें और ड्रैग करें';
}
}
} else {
// सिंगल पेज टूल शॉर्टकट
if (e.key === 'c' || e.key === 'C') {
e.preventDefault();
if (!cropSingleBtn.disabled) cropSingleBtn.click();
}
else if (e.key === 'p' || e.key === 'P') {
e.preventDefault();
if (!printSingleBtn.disabled) printSingleBtn.click();
}
else if (e.key === 'Escape') {
selectionBoxSingle.style.display = 'none';
currentSelectionSingle = null;
isDrawingSingle = false;
selectionInfoSingle.style.display = 'none';
if (imageLoadedSingle) {
selectionGuideSingle.style.display = 'block';
selectionGuideSingle.textContent = 'प्रिंट करने के लिए क्षेत्र चुनने के लिए नीचे दी गई इमेज पर क्लिक करें और ड्रैग करें';
}
}
}
});// डिफॉल्ट ड्रैग और ड्रॉप व्यवहार रोकें
document.addEventListener('dragover', function(e) {
e.preventDefault();
});document.addEventListener('drop', function(e) {
e.preventDefault();
});