PDA

View Full Version : سوال: ذخیره تصویر



aminsharifloo
یک شنبه 24 آبان 1388, 12:51 عصر
با سلام من می خواستم یک عکس در پایگاه داده ام ذخیره کنم و سپس ان را با سایر عکس ها مقایسه کنم
چطوری می تونم یه عکس رو ذخیره کنم ایا متغییرشو چی بذارم؟

مهدی نان شکری
یک شنبه 24 آبان 1388, 14:39 عصر
با سلام
برای ذخیره عکس DataType فیلد رو varbinary بگیرین.
و برای ذخیره کردن عکس می تونید از دستور Insert Into استفاده کنین.
مثلا


Insert Into Img(ID,Name,Pic)
Select 1,'My Name', BulkColumn From Openrowset(Bulk 'c:\scan0001.jpg',Single_Blob) as p

مهدی نان شکری
یک شنبه 24 آبان 1388, 14:41 عصر
در ضمن اگه از ADO.Net می خوایین عمل ذخیره سازی رو انجام بدین بهتره یه جستجو در سایت بکنبن برا این منظور از پارامتر باید استفاده کنین.

Reza.ariyan
یک شنبه 24 آبان 1388, 15:05 عصر
پسرم این کارو انجام ندی بهتره
(اگه عکس هاتو تو مسیر خاصی بریزی و مسیر عکسهار تو بانک ذخیره کنی بهتره)

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

شروع :
1 . تو جدولی که میخوای درست کنی یه فیلد با هر اسمی با نوع Image درست کن ;
مثلا اینطوری



CREATE TABLE [dbo].[ImageTypeTest]
(
[ID] [int] IDENTITY(1, 1)
NOT NULL,
[Picture] [image] NOT NULL,
CONSTRAINT [PK_ImageTypeTest] PRIMARY KEY CLUSTERED ( [ID] ASC )
WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
)
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

2 . هر وقت که خاصتی داده ای رو وارد کنی به شکل زیر اون داده (یا عکس) رو تو VBNET تبدیل به بایت کن :



Dim IMG As Image = Image.FromFile("D:\1.jpg")
'Convert Image to byte[]
Dim imgMemoryStream As MemoryStream = New MemoryStream()
Dim imgByteArray As Byte() = Nothing
IMG.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg)
imgByteArray = imgMemoryStream.GetBuffer()

3 . حالا مقدار متغییر imgByteArray رو در بانک اطلاعاتی ذخیره کن
----------------------------------------------------------------------------------------------
برای خواندین از بانک اطلاعاتی کارهای زیر رو انجام بده :
1 . مقدار فیلد Image رو که در بانک اطلاعاتی هست رو در متغییر (مثلا imgByteArray ) بریز .

2 . با نمونه کد زیر عکس را بخوان



'Convert Byte[] to image
imgMemoryStream = New IO.MemoryStream(imgByteArray)
IMG= Drawing.Image.FromStream(imgMemoryStream)
'Show Image
PictureBox1.Image = IMG

تو C# هم روش دقیقا همین هست (فقط تو تعریف متغییر فرق دارن) . چون هر دو دات نتی هستن