geekcomputers / geekcomputers/Python
Fars
Ouverte
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 35.4k
- Forks
- 12.9k
- Merge moyen
- 2 h 37 min
- PR mergées (30 j)
- 1
Description
<title>التقاط صورة تلقائيًا — باذن المستخدم</title>
<style>
body { font-family: system-ui, Arial; display:flex; gap:16px; align-items:flex-start; padding:18px; }
video, canvas, img { border:1px solid #ddd; border-radius:8px; max-width:320px; width:100%; }
#controls { display:flex; flex-direction:column; gap:8px; }
button { padding:8px 12px; border-radius:6px; cursor:pointer; }
.note { font-size:13px; color:#444 }
</style>
كاميرا مباشرة (اضغط سماح)
عند منح الإذن، الصفحة تلتقط صورة تلقائيًا بعد ثانية.
التقاط مرة ثانية تحميل الصورة <script> (async function(){ const video = document.getElementById('video'); const canvas = document.getElementById('canvas'); const photo = document.getElementById('photo'); const downloadLink = document.getElementById('downloadLink'); const retryBtn = document.getElementById('retry'); // خيارات: نطلب الكاميرا الأمامية (user) — غيّر إلى "environment" للكاميرا الخلفية const constraints = { video: { facingMode: "user", width: { ideal: 1280 }, height: { ideal: 720 } }, audio: false }; let stream = null; async function startCamera() { // اطلب إذن واخذ التيار فقط عند الموافقة try { stream = await navigator.mediaDevices.getUserMedia(constraints); video.srcObject = stream; // تأكد أن الفيديو بدأ بالعرض قبل التقاط صورة await video.play(); // ننتظر 1 ثانية ثم ناخذ صورة (تقدر تغير اللازمة) setTimeout(captureOnce, 1000); } catch (err) { alert('فشل الوصول للكاميرا: ' + (err && err.message ? err.message : err)); console.error(err); } } function captureOnce() { if (!stream) return; // اضبط قياسات الكانفس بحسب الفيديو const w = video.videoWidth; const h = video.videoHeight; if (!w || !h) { console.warn('الحصول على أبعاد الفيديو لم يكتمل بعد.'); setTimeout(captureOnce, 300); // حاول مرة ثانية لو ما جاهز return; } canvas.width = w; canvas.height = h; const ctx = canvas.getContext('2d'); ctx.drawImage(video, 0, 0, w, h); // حول المحتوى إلى DataURL (PNG) const dataUrl = canvas.toDataURL('image/png'); photo.src = dataUrl; photo.style.display = 'block'; downloadLink.href = dataUrl; downloadLink.style.display = 'inline-block'; downloadLink.textContent = 'حفظ الصورة'; // إذا تبغى توقف البث بعد التقاط الصورة (لحفظ الخصوصية) stopStream(); } function stopStream() { if (!stream) return; stream.getTracks().forEach(t => t.stop()); stream = null; video.srcObject = null; } retryBtn.addEventListener('click', () => { // إعادة المحاولة: اخفظ العنصر الحالي ثم ابدأ من جديد photo.src = ''; downloadLink.style.display = 'none'; startCamera(); }); // ابدأ العملية (سيطلب إذن الكاميرا تلقائيًا) startCamera(); // ========================================================= // ملاحظة: لو تبغى التقاط تلقائي متكرر بدل مرة واحدة، تقدر تنادي captureOnce() بفواصل زمنية // لكن لازم تخلي المستخدم يعلم ويوافق على التسجيل المستمر. // ========================================================= })(); </script>Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
L’issue contient une page autonome en HTML et JavaScript pour capturer des images avec la caméra, mais ne mentionne aucun fichier du dépôt, aucun test ni aucune modification demandée. Il faut d’abord déterminer si cette page doit appartenir au dépôt d’exemples Python et quel comportement est attendu ; jusque-là, aucun critère d’achèvement n’est défini.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- html, javascript
- Domaine
- web-dev
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 10/100