PDA

View Full Version : سوال: تعیین اندازه عکس به وسیله url



ehsan2007
چهارشنبه 16 مرداد 1387, 15:04 عصر
سلام به دوستان
من میخوام یک آدرس عکس از کاربرانم بگیرم و اگه طول و عرضش کوچکتر از 90 بود اون آدرسو توی بانکم ذخیره کنم لطفا کمک کنید
کدی که دارم اشتباه داره در خوندن عکس از سایت دیگه


System.Drawing.Image img = System.Drawing.Image.FromFile(URL);
if ((img.Width > 90) || (img.Height > 90)) { TextBox1.Text = "no"; } else { TextBox1.Text = "yes"; }

raravaice
چهارشنبه 16 مرداد 1387, 18:13 عصر
System.Drawing.Image img = System.Drawing.Image.FromFile(URL);

بی معنی هست احسان جان.

شما باید اون عکس رو ابتدا دانلود کنی توی سرور خودت بعد Stream کنیش.

موفق باشید

ehsan2007
چهارشنبه 16 مرداد 1387, 18:49 عصر
بی معنی هست احسان جان.

شما باید اون عکس رو ابتدا دانلود کنی توی سرور خودت بعد Stream کنیش.
میشه دوست عزیز نمونه کد بگزارید یا بیشتر توضیح بدید
من فقط میخوام طول و عرض عکسو بررسی کنم همین

raravaice
چهارشنبه 16 مرداد 1387, 20:06 عصر
احسان جان من نمونه سورس الان دم دست ندارم داداش ولی :

خیلی منطقی هست چون FromFile میخواد فایل رو از روی درایو فیزیکی فایل بخونه و Stream کنه در حالی که شما داری URL بهش میدی.
شما با کلاسهای httpwebrequest و httpwebresponse یا راحتتر webclient فایل رو دانلود کن بعد طول و عرض یا هرچی که خواستی محاسبه کن.

موفق باشید

ehsan2007
چهارشنبه 16 مرداد 1387, 20:13 عصر
میگردم دنبال کلاس ه توی msdn اگه به مشکلی بر خوردم میپرسم

ehsan2007
پنج شنبه 17 مرداد 1387, 00:04 صبح
حل نشد دوست عزیز

System.Net.WebRequest webRequest = WebRequest.Create(TextBox1.Text.ToString());
System.Net.WebResponse webResponse = webRequest.GetResponse();
System.IO.StreamReader sr = new StreamReader(webResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("UTF-8"));
content = sr.ReadToEnd();


byte[] array = Convert.FromBase64String(content);

System.Drawing.Image img = System.Drawing.Image.FromStream(new MemoryStream(array));

if ((img.Width > 90) || (img.Height > 90)) { TextBox1.Text = "na"; } else { TextBox1.Text = "oh";بعد از برگردوندن قسمت تبدیل استرینگ به عکس خطا میده
byte[] array = Convert.FromBase64String(content);

raravaice
پنج شنبه 17 مرداد 1387, 00:17 صبح
کم دقتی کردی تکنولوژی رو بردی زیر سئوال .;)

شما کد باینری عکس رو داری به UTF-8 تبدیل میکنی که چی بشه؟!
اون Base64 اون وسط چی میخواد؟!

روشت درسته منتهی دیتای عکس رو همونطور که باینری هست بخون و استریم کن تکنیک روش نزن.

موفق باشی داداش

ehsan2007
پنج شنبه 17 مرداد 1387, 11:40 صبح
داداش نمیشه هر کاری کردم نشد

این کدو ببین یک عکسو میگره استریم میکنه باز برمیگردونتش

System.Drawing.Image img = System.Drawing.Image.FromFile(@"c:\pict1.jpg");
System.IO.MemoryStream ms = new System.IO.MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
string b64 = Convert.ToBase64String(ms.ToArray());
// Housecleaning: Get rid of the local instances
img.Dispose();
ms.Close();



// Here's where aikeith's relevance starts

byte[] b;
b = Convert.FromBase64String(b64);
ms = new System.IO.MemoryStream(b);
img = System.Drawing.Image.FromStream(ms);



// Since this is a console app, save file so I can see if it works.

img.Save(@"c:\pict1_from_b64.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
// Housecleaning: Get rid of the local instances
img.Dispose();
ms.Close();


ولی وقتی من عکسو میخونم نمیشه چون همون اول استریم شده است این کد منه


System.Net.WebRequest webRequest = WebRequest.Create(TextBox1.Text.ToString());
System.Net.WebResponse webResponse = webRequest.GetResponse();
System.IO.StreamReader sr = new StreamReader(webResponse.GetResponseStream());

byte[] b;
b = Convert.FromBase64String(sr.ReadToEnd());
System.IO.MemoryStream ms = new System.IO.MemoryStream();
ms = new System.IO.MemoryStream(b);

System.Drawing.Image img = System.Drawing.Image.FromStream(ms);

if ((img.Width > 90) || (img.Height > 90)) { TextBox1.Text = "na"; }
else
{
TextBox1.Text = "oh";




}

raravaice
پنج شنبه 17 مرداد 1387, 18:01 عصر
httpwebresponse و httpwebrequest رو فعلا فراموش کن از روش زیر استفاده کن فعلا کارت راه بیافته بعد اطلاعاتت رو راجع به این کلاسها زیاد کن،چون به درد بخورند.



Dim Pic As New Net.WebClient
Dim bytes As Byte()
bytes = Pic.DownloadData("http://barnamenevis.org/forum/images/misc/logo42.gif")
Dim ms As System.IO.MemoryStream
ms = New System.IO.MemoryStream(bytes)
Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(ms)
Response.Write(img.Height & "--" & img.Width)


موفق باشید

ehsan2007
پنج شنبه 17 مرداد 1387, 18:54 عصر
جا میداشت 1000 بار دکمه تشکرو فشار میدادم ممنون داداش

salehbagheri
جمعه 18 مرداد 1387, 00:07 صبح
با تشكر فراوان از برنامه نويس حرفه اي مثل raravaice ولي:

برنامه نويسان عزيز! فكر مي كنم فايلي به نام Handle.ashx اينجاها بدرد مي خورد كه هيچ كس استفاده نكرد!!!!!

raravaice
جمعه 18 مرداد 1387, 00:17 صبح
با تشكر فراوان
ارادت! ;)


فكر مي كنم فايلي به نام Handle.ashx اينجاها بدرد مي خورد كه هيچ كس استفاده نكرد!!!!!

حق با شماست ولی :
در صورتی که قرار باشه این پروسه توسط درخواست Ajax صورت بگیره بهینه هست در غیر این صورت لزومی نداره.

موفق باشید