PDA

View Full Version : ذخیره سازی تصاویر در SQL با VB.net



rahime
شنبه 07 مرداد 1391, 13:27 عصر
سلام دوستان
من طبق نوشته های شما در رابطه با ذخیره سازی تصاویر به این نتیجه رسیدم که بهترین روش برای ذخیره سازی عکس های برنامه ام که فوق العاده زیاد هستن از file stream استفاده کنم.میشه درباره file stream یکم توضیح بدین.
تازه کارم توی این زمینه
هیچی دربارش نمیدونم

the king
شنبه 07 مرداد 1391, 20:49 عصر
سلام دوستان
من طبق نوشته های شما در رابطه با ذخیره سازی تصاویر به این نتیجه رسیدم که بهترین روش برای ذخیره سازی عکس های برنامه ام که فوق العاده زیاد هستن از file stream استفاده کنم.میشه درباره file stream یکم توضیح بدین.
تازه کارم توی این زمینه
هیچی دربارش نمیدونم

روی سخن تون با کیه؟ در جدول بانک اطلاعاتی تون یک فیلد تعریف کنید با نوع (varbinary(MAX که بتونه داده باینری یک تصویر رو نگهداری کنه.
تصویری که قراره ذخیره بشه الان یا داخل یک فایله، یا داخل یک PictureBox یا هر جایی دیگری، به هر حال بصورت یک شیء Image آماده اش کنید :

Dim img As Image = Image.FromFile("C:\Your Path\Your Image.jpg")


Dim img As Image = PictureBox1.Image

سپس اگه در حین تبدیل کردنش به داده باینری برای کاهش حجم داده های تصویر قدری فشرده اش کنید بد نیست، مثلا فشرده سازی 75 :

Dim params As System.Drawing.Imaging.EncoderParameters
params = New System.Drawing.Imaging.EncoderParameters(1)
params.Param(0) = New System.Drawing.Imaging.EncoderParameter _
(System.Drawing.Imaging.Encoder.Quality, 75)
Dim codecInfo As System.Drawing.Imaging.ImageCodecInfo = Nothing
Dim encoders() As System.Drawing.Imaging.ImageCodecInfo
encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEnco ders()
For Each item As System.Drawing.Imaging.ImageCodecInfo In encoders
If item.MimeType = "image/jpeg" Then
codecInfo = item
Exit For
End If
Next
Dim bytes() As Byte
Using mem As New System.IO.MemoryStream()
img.Save(mem, codecInfo, params)
bytes = mem.ToArray()
End Using


حالا داده باینری در bytes آماده است در فیلد مورد نظر بنویسیدش :

yourDataRow("yourFieldName") = bytes


و زمانی که خواستید مجددا از فیلد بخوانید و به یک Image تبدیل کنید :

Dim bytes() As Byte = yourDataRow("yourFieldName")
Dim img As Image
Using mem As New System.IO.MemoryStream()
img = Image.FromStream(mem)
End Using

و فرضا نمایش دهید :

PictureBox1.Image = img

M.KH-SH
شنبه 07 مرداد 1391, 21:33 عصر
دوست عزیز این همه کد برای چی؟

با این تبدیل به باینری کن '
dim arr () as byte=io.file.readallbyte("")

io.file.writeallbytes("c:\xxx.jpg",arr)
با این کد اینارو ذخیره کن روی هارد'

dim n as io.memorystream(arr)
me.picturebox1.image=image.fromstream(n)
'این کد هم برای نمایش مستقیم


حالا شما میخوای تو هرچی ذخیره کنی این روش هستش

the king
شنبه 07 مرداد 1391, 22:14 عصر
دوست عزیز این همه کد برای چی؟

عرض کردم که، برای اینکه تصویر قبل از ذخیره کردن در بانک اطلاعاتی فشرده بشه. وقتی تعداد تصویر شون خیلی زیاد باشه
چند سطر کد اضافه نوشتن بهتر از اینه که بانک اطلاعاتی خیلی حجیم و تراکنش ها کند بشه.

rahime
یک شنبه 08 مرداد 1391, 09:23 صبح
ممنونم دوستان