PDA

View Full Version : ذخیره عکس در داخل database sql



محسن بابائی
چهارشنبه 02 خرداد 1386, 06:50 صبح
سلام
معمولا عکس هایی که را می خواهیم در دیتابیس ذخیره کنیم اون را توی یه pictureBox نمایش داده وسپس عکس داخل pictureBox را ذخیره می نماییم.
معمولا خاصیت size pictureBox به صورت استرچ(Stretch) هست .
حال من می خوام که عکس با سایزی که در pictureBox هست ذخیره بشه نه با سایز واقعی . می دونید که عکس با سایز واقعی ذخیره می شه .

ghafoori
چهارشنبه 02 خرداد 1386, 07:52 صبح
دوست عزیز شما 2 راه دارید اول عکس را در بانک ذخیره کنید و دومی ادرس عکس را در بانک ذخیره کنید
در حالت اول شما باید یک فیلد از نوع image در جدولتون ایجاد کنید بعد ان را در اندازه دلخواه در یک stream بصورت موقت ذخیره کنید و در نهایت با sqlcommand و ... ان stream را در بانک ذخیره کنید

در راه دوم شما عکس را در بانک ذخیره نمی کنید می توانید عکس ها را داخل یک پوشه قرار دهید حتی لازم به تغیر سایز هم نیست شما اندازه عکس را همراه ادرس ان در بانک ذخیره می کنید

art2000ir
چهارشنبه 02 خرداد 1386, 08:16 صبح
اگر آدرس عکس را در بانک ذخیره کنید هنگام گزارش گیری با کریستال به مشکل بر می خورید
شما می خواهید عکسی که داخل بانک هست را پرینت کنید خوب سایز عکس را می توانید هنگام پرینت مشخص کنید

saeed_rezaei
چهارشنبه 02 خرداد 1386, 12:49 عصر
سلام. اگه شما می خواید عکس رو کوچکتر از اندازه واقعیش ذخیره کنید. باید قبل از ذخیره سازی پهنا و ارتفاع عکس رو کم کنید.
قطعه کد زیر اندازه واقعی عکس رو تغییر میده.



' Get the scale factor.
Dim scale_factor AsSingle = Single.Parse(picDest.Width / picSource.Width)

' Get the source bitmap.
Dim bm_source AsNew Bitmap(picSource.Image)

' Make a bitmap for the result.
Dim bm_dest AsNew Bitmap( _
CInt(bm_source.Width * scale_factor), _
CInt(bm_source.Height * scale_factor))

' Make a Graphics object for the result Bitmap.
Dim gr_dest As Graphics = Graphics.FromImage(bm_dest)

' Copy the source image into the destination bitmap.
gr_dest.DrawImage(bm_source, 0, 0, _
bm_dest.Width + 1, _
bm_dest.Height + 1)

' Display the result.
picDest.Image = bm_dest


دقت کنید که در این مثال دو جعبه متن وجود داره. جعبه متن اول
picSource تصویر واقعی رو در خودش داره و جعبه متن picDest تصویر کوچک شده رو به شما نشون می ده. (برنامه سورس هم زدم تا راحت تر قضیه رو حل کنی)
فکر نمی کنم کدی که زدم ابهام داشته باشه. اگه سوالی داشتید و یا ابهامی در کد وجود داره تا بیشتر توضیح بدم.
یه مطلب دیگه اینکه شما می تونید، سایز تغییر اندازه رو خودتون مشخص کنید اگه در خط دوم


Dim scale_factor AsSingle = Single.Parse(picDest.Width / picSource.Width)

به جای picDest.Width / picSource.Width یه عدد مثلا 2 رو بنویسید تصویر نتیجه دوبرابر می شه.
من از picDest.Width / picSource.Width استفاده کردم تا تصاویر به صورت نسبی کوچیک شه.

Keramatifar
چهارشنبه 02 خرداد 1386, 14:54 عصر
دوست عزیز
منم چند روز پیش نیاز داشتم که هر عکسی رو که می خواهم ذخیره کنم رو با یک سایز استاندارد لوگو (150*150) ذخیره کنم و از این کد استفاده کردم تا هر عکسی رو که از Upload File میاد رو تغییر سایز بدم و ذخیره کنم



if (FileUpload2.HasFile)
{
HttpPostedFile myFile = FileUpload2.PostedFile;
string fileName = myFile.FileName);

Bitmap bitmap = new Bitmap(myFile.FileName);
Bitmap myBitmap = new Bitmap(bitmap, 150, 150);
myBitmap.Save(Server.MapPath("~/Images/") + fileName);
StatusLabel.Text = "فایل شما با موفقیت آپلود شد. نام فایل: " + fileName;
Label9.Visible = true;
}
else
{
StatusLabel.Text = "خطا در آپلود شدن فایل، مجدداً سعی کنید ...";
}


البته کد C# است ولی چون با VB خیلی فرق نمی کنه برات گذاشتم حالا اگه تو تبدیلش به VB مشکل داشتی بگو تا خودم برات تبدیلش کنم

محسن بابائی
پنج شنبه 03 خرداد 1386, 01:30 صبح
سلام
من از این کد جهت ذخیره در بانک استفاده می کنم


Dim arrImage() As Byte
Dim ms As New MemoryStream
picDest.Image.Save(ms, picDest.Image.RawFormat)
arrImage = ms.GetBuffer

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


picDest.Image.Save(ms, picDest.Image.RawFormat)


error هم اینه :

.Value Can not null
parameter name : encoder

خطای بالا را هم هنگام آپدیت کردن هم میده .

مشکل کجاست؟

a.maleki
سه شنبه 02 مرداد 1386, 12:02 عصر
دوست عزیز
امکان داره کد فوق را بصورت وبی .نت هم اعلام کنی شاید مشکل من هم حل شه
ممنون میشم