الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التقاط الصور من الكاميرا بدون استخدام jQuery

بدأه ameral في 21 أغسطس 2012 · 25 رد · 2,422 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

بسب كثرة الطلب علي إلتقاط الصور مياشرة من الكاميرا و إستخدامها وحفظها بدون استخدام jQuery

اللغة المستخدمة #C

1- في الداية نقوم بإنشاء المشروع وننشئ صفحتين الأولي الإلتقاط الصور والأخري لإستقبال الصور.

*مهم* ان يكون المجلد WebcamResources l موجود ضمن ملفات المشروع تجده في المرفقات .

2- في الصفحة الأولي Default.aspx لا يوجد إلا كود تصميم بسيط داخل تاج ال form

<object width="405" height="190"
  param name="movie" value="WebcamResources/save_picture.swf"
  embed src="WebcamResources/save_picture.swf" width="405" height="190" >
</object>

* تأكد من مسار WebcamResources/save_picture.swf .

3- في الصفحة الأخري ImageConversions.aspx توجد دالة استقبال البيانات و تحويلها الي صورة

الدالة

void CreatePhoto()
    {
        try
        {
            string strPhoto = Request.Form["imageData"]; //Get the image from flash file
            byte[] photo = Convert.FromBase64String(strPhoto);
            FileStream fs = new FileStream("C:\\Webcam.jpg", FileMode.OpenOrCreate, FileAccess.Write);
            BinaryWriter br = new BinaryWriter(fs);
            br.Write(photo);
            br.Flush();
            br.Close();
            fs.Close();
        }
        catch (Exception Ex)
        {

        }
    }

استدعاء الدالة و يتم عرض الصورة

 protected void Page_Load(object sender, EventArgs e)
    {
        CreatePhoto();
    }

ملاحظة يوجد ملف فلاش مفتوح المصدر save_picture.fla للتعديل علي شكل نموذج التقاط الصور

و السلام عليكم

WebcamCapture-asp.net.rar

4
#2

اخي العزيز ..مشكور على المثال الرائع .. لكن لدي بعض الاستفسارات

1- كيف اقوم بتخزين الصور في قاعدة البيانات .. لاني عندما اقوم بتصوير صورة رقم واحد ثم اقوم بتصوير الصورة رقم اثنين الصورة رقم اثنين تاخذ مكان الصورة رقم واحد

واريد ان اقوم بتخزين كل صور اقوم بالتقاطها قي قاعدة البيانات ياليت توضح لنا كيف نقوم بذالك ولك جزيل الشكر والتقدير

#3

يفضل تخزين الصور في ملفات مستقلة عن قاعدة البيانات، وتخزين أسماء الصور فقط في القاعدة (والتي ستكون ضمن مسار معروف بالنسبة للبرنامج انطلاقاً من جذره)

وبدلاً من استخدام اسم ثابت للصورة، يمكن توليد اسم شبه عشوائي اعتماداً على بعض المعطيات، كوقت التقاط الصورة مثلاً .. أو وقت التقاط الصورة مع رقم عضوية الحساب الذي قام بالتقاطها... إلخ

بعد تخزين الصورة في المسار المطلوب حسب الكود الظاهر في موضوع الأخ ameral، يتم تخزين الاسم الذي تم توليده في القاعدة بسهولة.

2

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#4

شكرا علي الردود

بالنسبة لإستفسار ورق خسرانه >> يمكن استخدام المتغير photo الذي من نوع byte

بسبب ضيق الوقت انظر علي هذه الروابط

http://www.aspsnippets.com/Articles/Save-and-Retrieve-Files-from-SQL-Server-Database-using-ASP.Net.aspx

او

http://aspnet.4guysfromrolla.com/articles/120606-1.aspx

تم تعديل هذه المشاركة بواسطة ameral في 22 أغسطس 2012 في 16:46

1
#5

مشكور يامشرفنا العزيز Xacker نعم انا استخدم دائم هاذة الطريقة .. انني اقوم بتخزين اسم الصورة فقط .. في الدتا بيز والصور نفسها اخزنها في ملف خارجي

بس المشكله انه الان لما اشغل المثال اريد ان اعرف اين تذهب الصور ؟ لانني شغلته والتقط كذا صورة .. ولم اجد اي صورة ؟ ياليت توضحو لي اين اجد الصور الذي اقوم بالتقاطها

ameral كتب:

شكرا علي الردود

بالنسبة لإستفسار ورق خسرانه >> يمكن استخدام المتغير photo الذي من نوع byte

بسبب ضيق الوقت انظر علي هذه الروابط

http://www.aspsnippe...ng-ASP.Net.aspx

او

http://aspnet.4guysf...s/120606-1.aspx

مشكور اخي العزيز جاري الاطلاع على الروابط ...

تم تعديل هذه المشاركة بواسطة ورق خسرانه في 22 أغسطس 2012 في 21:46

#6

طيب سؤال اخي ... لو اردت ان اقوم بتسمية الصور بنفسي ؟ كيف اقوم بتغيير اسم الصورة الثابت الذي موجود في الدالة باسم Webcam.jpg

اريد ان اقوم بتسمية الصور بنفسي من اجل لا تاخذ الصورة الجديد مكان الصورة القديمة وتنحذف

#7
ورق خسرانه كتب:

بس المشكله انه الان لما اشغل المثال اريد ان اعرف اين تذهب الصور ؟ لانني شغلته والتقط كذا صورة .. ولم اجد اي صورة ؟ ياليت توضحو لي اين اجد الصور الذي اقوم بالتقاطها

المفروض أنها في C:\

لكن إن لم تجدها في C:\ فاحتمال أن يكون هناك مشكلة صلاحيات في تلك السواقة (على أنظمة Vista / 7)

لذلك جرب تغيير المسار إلى سواقة أخرى إن لم تجدها هناك.

وطبعاً بالنسبة لتغيير الاسم فيمكنك مثلاً تسميتها بحسب وقت التقاطها

FileStream fs = new FileStream(string.Format("{0}{1}", "C:\\", DateTime.Now.ToString()), FileMode.OpenOrCreate, FileAccess.Write);

لكن التاريخ والوقت غير مناسب 100% لأنه يوجد احتمال ولو بسيط جداً أن يقوم شخصان بالتقاط صورة في ذات الثانية، بالتالي سيتم حفظ صورة واحدة فقط وهي التي تكون أحدث بفرق أجزاء الثانية!

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#8

مشكور خيو على المساعدة .. لكن جربت الكود ولم يحفظ الصورة ..

وحاولت كتابت كود ولكن نفس المشكلة انهو عند التقاط صورة .. جديدة تاخذ مكان الاول .. وهذه هو الكود

 string s = "taha";
            s = s + 1;
            FileStream fs = new FileStream(string.Format("{0}{1}", "C:\\", s + ".jpg"), FileMode.OpenOrCreate, FileAccess.Write);

ياليت تشوف لي ايش الحل .. فكرت ان اضع .. دالة رندوم ؟ لكن .. قلت ربماء يوم من الايام تتكرر اسم الصورة ... وانا اريد ان لا يتكرر ابداُ

تم تعديل هذه المشاركة بواسطة ورق خسرانه في 23 أغسطس 2012 في 09:22

#9

المشكلة كانت في أن التاريخ يأتي بالتنسيق yyyy/MM/dd ولا يسمح نظام Windows باستخدام / في أسماء الملفات بطبيعة الحال، لذلك كان هناك exception ملتقط لكن لا تظهر رسالة تعلمك به.

التصحيح:

System.Security.Cryptography.HashAlgorithm sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
            byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(DateTime.Now.ToString()));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
                sb.Append(hash.ToString("x2"));
            FileStream fs = new FileStream(string.Format("{0}{1}.jpg", @"C:\", sb.ToString()), FileMode.OpenOrCreate, FileAccess.Write);

نقوم بحساب hash للحظة التي تم فيها التقاط الصورة ونستخدمه كاسم لها.

من النادر أن يحصل collision في هذه الحالة، لكنه ممكن بنسبة ضئيلة.

يمكنك في حال استخدام الطريقة السابقة في موقع ما مثلاً، أن تقوم باستخدام رقم عضوية مستخدم، مثلاً، مع لحظة التقاط الصورة وبالتالي تخفف من تلك النسبة أكثر.

* في حال لم تظهر الصورة في المسار C:\ فالأفضل استخدام مسار آخر (D:\ مثلاً) لأنها ستكون مشكلة صلاحيات على Vista / 7 كما ذكرت سابقاً.

1

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#10
Xacker كتب:

المشكلة كانت في أن التاريخ يأتي بالتنسيق yyyy/MM/dd ولا يسمح نظام Windows باستخدام / في أسماء الملفات بطبيعة الحال، لذلك كان هناك exception ملتقط لكن لا تظهر رسالة تعلمك به.

التصحيح:

System.Security.Cryptography.HashAlgorithm sha = new System.Security.Cryptography.SHA1CryptoServiceProvider();
            byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(DateTime.Now.ToString()));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
                sb.Append(hash.ToString("x2"));
            FileStream fs = new FileStream(string.Format("{0}{1}.jpg", @"C:\", sb.ToString()), FileMode.OpenOrCreate, FileAccess.Write);

نقوم بحساب hash للحظة التي تم فيها التقاط الصورة ونستخدمه كاسم لها.

من النادر أن يحصل collision في هذه الحالة، لكنه ممكن بنسبة ضئيلة.

يمكنك في حال استخدام الطريقة السابقة في موقع ما مثلاً، أن تقوم باستخدام رقم عضوية مستخدم، مثلاً، مع لحظة التقاط الصورة وبالتالي تخفف من تلك النسبة أكثر.

* في حال لم تظهر الصورة في المسار C:\ فالأفضل استخدام مسار آخر (D:\ مثلاً) لأنها ستكون مشكلة صلاحيات على Vista / 7 كما ذكرت سابقاً.

****************************************************************************************************************************

مشكور اخي ومشرفنا العزيز .. تم حل المشكلة ننجاج اشكرك على المساعدة .. لكن بقي عندي سؤال بسيط .. اعرف انني اكثرة عليك بالاسئلة .. ولكن من اجل الاستفادة من خبرتكم اخي العزيز

انا اريد ان ارفع المثال على موقعي في الاستضافة .. وعندي ملف جهزته مسبقاُ للحفظ الصورة .. اسمه images كيف اقوم بحفظ الصور فيه ولك جزيل الشكر والتقدير

#11
ورق خسرانه كتب:

وعندي ملف جهزته مسبقاُ للحفظ الصورة .. اسمه images كيف اقوم بحفظ الصور فيه

هذه لم أفهمها،

هل تقصد مجلّد folder اسمه images ؟

إن كان هذا قصدك فيكفي أن تستبدل: @"C:\" بالمسار إلى المجلد على استضافتك، حسبما يظهر لك المسار في لوحة التحكم، مثلاً: @"\path\to\your\images\"

لكن المسار لا يمكنني تحديده لك بالضبط فسيختلف من استضافة لأخرى حسب الإعدادات لديهم، لكن تستطيع الحصول عليه من الـ File manager الموجود في لوحة التحكم لديك بسهولة، والله أعلم.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#12

اخي العزيز سويت كذا بس مارضي

@"\images\"

وسويت بعد كذا @"\images"

ونفس الشي مايرضي

ولما اسوي المسار كامل يخزن الصورة بس خارج الملف

C:\Users\KIFAHY\Desktop\التقاط صور من كامرة\images

يخزن الصور خارج الملف مايخزنها بداخلة

#13

هذا المسار C:\Users\KIFAHY\Desktop\التقاط صور من كامرة\images إلى المجلد images خاطئ لأنه لا يحوي على \ في نهايته، بالتالي تصبح السلسلة النصية:

C:\Users\KIFAHY\Desktop\التقاط صور من كامرة\images{SHA1 hash}.jpg

بدلاً من @"\images\" جرب @".\images\"

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#14
Xacker كتب:

هذا المسار C:\Users\KIFAHY\Desktop\التقاط صور من كامرة\images إلى المجلد images خاطئ لأنه لا يحوي على \ في نهايته، بالتالي تصبح السلسلة النصية:

C:\Users\KIFAHY\Desktop\التقاط صور من كامرة\images{SHA1 hash}.jpg

بدلاً من @"\images\" جرب @".\images\"

جربت اخي ال @".\images\" ولكن نفس الشي لاتخزن الصورة العفو اني كثرت عليك الاسئلة

#15

جرب هذا:

string.Format(@"{0}images\{1}.jpg", Request.PhysicalPath.Replace(System.IO.Path.GetFileName(Request.PhysicalPath), ""), sb.ToString())

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#16
Xacker كتب:

جرب هذا:

string.Format(@"{0}images\{1}.jpg", Request.PhysicalPath.Replace(System.IO.Path.GetFileName(Request.PhysicalPath), ""), sb.ToString())

مششكور اخي العزيز .. الكود اشتغل ماقصرت والله

#17

اخي انا رفعت صفحة على سيرفر

بدي اللي يدخل على الصفحة يشوفني كيف ممكن اعدل هالاشي

طبعا انا اقصد انه الصفحة وضعت فيها كود الكاكيرا هاد

<object width="405" height="190"

param name="movie" value="WebcamResources/save_picture.swf"

embed src="WebcamResources/save_picture.swf" width="405" height="190" >

</object>

#18

؟ ارجو المساعدة

يعني اريد انه الشخص لما يفتح الصفحة اللي فيها الكود يشوفني انا مش يشوف نفسه وانا اشوف نفسي

#19
ورق خسرانه كتب:

مششكور اخي العزيز .. الكود اشتغل ماقصرت والله

اخي السلام عليكم

بعد التقاط الصورة وتحزينه في فولدر ال Image كيف اتستطعت ان تحزنه في قاعده البيانات مع بيانات اخرى مثل اسم الصورة او تاريخ التقاط الصورة في جدول بقاعده البيانات !

مشكور مقدما

#20

حد يساعدني

:cry: :cry: :cry:

#21

:mad:

#22

ما في حد يساعدني يعني :sad:

#23

:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

#24

السلام علبكم

بالنسبة للمشاركة

easy_3a3 كتب:

اخي انا رفعت صفحة على سيرفر

بدي اللي يدخل على الصفحة يشوفني كيف ممكن اعدل هالاشي

طبعا انا اقصد انه الصفحة وضعت فيها كود الكاكيرا هاد

<object width="405" height="190"

param name="movie" value="WebcamResources/save_picture.swf"

embed src="WebcamResources/save_picture.swf" width="405" height="190" >

</object>

#25
ameral كتب:

السلام علبكم

بالنسبة للمشاركة

ادا كنت تريد بث مباشر فيديو من كاميرا ويب يوجد شرح في الرابط التالي

http://www.cctvcamerapros.com/Embedding-IP-Camera-Web-Page-s/326.htm

اما اذا كنت تريد فقط التقاط صورة استخدم السكربت الموجود في الموضوع الحالي لكن انشئ صفحتين صفحة لاتقاط صورتك و الصفحة الأخري حتي يشاهد الزوار هذه الصورة "علي حسب ما فهمت سؤالك " والسلام عليكم

وعليكم السلام

شكرا على الرد اخي الكريم واسفة على الازعاج

انا بدي الكود الفيديو اللي بنعرض بالمثال تبعك بدل ما يعرض الفيديو تبعي انا يعرض يعرض الفيديو لحد تاني

يعني انا رفعت ملف الفلاش تبعك على سيرفر سومي

لا ادخل على الموقع بعرضلي فيديو الى انا

ولو حد تاني دخل من جهاز تاني بعرضله الفيديو تبعه

انا ما بدي هيك بدي العكس يعني كل واحد يشوف التاني كانه شات كاميرا

مواضيع مشابهة