-
سلام
یک روش به قول معروف "بیابونی" سراغ دارم، که البته خودم تستش کردم و می دونم که اصولی نیست ولی کار راه بندازه *و برای ایشون که مشکل حجم دیتابیس داره *خوب جواب میده .
توی این روش حجم دیتابیس خیلی اضافه نمیشه ولی سرعت خواندن عکس از دیتابیس و اضافه کردن عکس داخل دیتابیس پایین میاد - در این روش باید ابتدا عکس رو به رشته تبدیل کرد**( تعجب نکن میشه اینکارو کرد )***و رشته رو در دیتابیس قرار داد - برای خوندن عکس هم ابتدا رشته رو می خونی و بعد به عکس تبدیل می کنی - این تبدیل ها رو من با vb.net انجام دادم - کد دلفی رو ندارم کد های vb *رو قرار می دم خودت دیگه تبدیلش کن به دلفی ( اگه می تونی ) *
*
کد:
کد:
Public Function ImageToStr(ByVal ImageAdr As String) As String* * * *
* * * * * * Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(ImageAdr)* * *
* * ** * * Dim ms = New System.IO.MemoryStream()*
* ** * * * img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)*
** * * * * Dim b64 As String = Convert.ToBase64String(ms.ToArray())*
* ** * * * img.Dispose()* *
* ** * * * ms.Close()* * * *
* * * * * Return b64*
* * * * End Function
Public Function StrToImage(ByVal Strb64 As String) As Image
* * * * * *Dim b() As Byte
* * * * * *b = Convert.FromBase64String(Strb64)
* * * * * *Dim ms = New System.IO.MemoryStream(b)
* * * * * *Dim img = System.Drawing.Image.FromStream(ms)
* * * * * *ms.Close()
* * * * * *Return img
* * * *End Function
-
نقل قول از javad_rajabloo
منم یه همچین مشکلی دارم که در [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید] مطرح شده
من هم اولویتم با اینه که عکس در بانک ذخیره بشه ، چون راحت تره
اما اگه نشد مجبوریم که آدرس رو ذخیره کنیم
من روش فشرده کردن فایل bmp رو به jpg دارم که حدود 500 کیلو رو به 8 کیلو رسوندم
اگه دوست داری کدشو بذارم
اگر بذارید که عالی میشه!
-
کد مربوط به تبدیل اینه
var
*MyJPEG : TJPEGImage;
*MyBMP* : TBitmap;
begin
*MyBMP := TBitmap.Create;
*with MyBMP do
** try
**** {Cargamos el BMP}
**** {Load the BMP}
**** LoadFromFile("filename.bmp");
**** MyJPEG := TJPEGImage.Create;
**** with MyJPEG do begin
****** Assign(MyBMP);
****** {Grabamos el JPG}
****** {Save the JPG}
****** SaveToFile("filename.JPG");
****** Free;
**** end;
** finally
**** Free;
** end
end;
البته این کد ، فایل bmp رو به jpg تبدیل میکنه و حجمش رو خیلی پایین میاره
این کامپوننت هم یک db image هست که با اونی که داخل خود دلفی هست فرق میکنه و فرقش هم اینه که فایلهای jpg رو ساپورت می کنه
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
-
ذخیره تصویر در دیتابیس
چطور می تونم عکسها را در دیتابیس ذخیره کنم که حجم دیتابیس خیلی بالا نره
روشی برای کمپرس کردن تصاویر هست؟
من نرم افزاری دارم که با دلفی 7 و اس کیو ال 2008 نوشتم تصاویر را با استفاده از memoryStream ذخیره میکنم
از این بابت مشکلی ندارم ولی اگر تعدادی عکس داشده باشم که حجمشون حدودا 400 کیلو بایت باشه بعد از اضافه کردن
به دیتابیس حجم دیتا بیس نزدیک 200 مگابایت اضافه میشه. راه حلی هست؟
در ضمن میخوام خود عکس ها رو ذخیره کنم نه آدرسهارو.
ممنون و متشکر
-
منم یه همچین مشکلی دارم که در [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید] مطرح شده
من هم اولویتم با اینه که عکس در بانک ذخیره بشه ، چون راحت تره
اما اگه نشد مجبوریم که آدرس رو ذخیره کنیم
من روش فشرده کردن فایل bmp رو به jpg دارم که حدود 500 کیلو رو به 8 کیلو رسوندم
اگه دوست داری کدشو بذارم
-
نقل قول از javad_rajabloo
منم یه همچین مشکلی دارم که در [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید] مطرح شده
من هم اولویتم با اینه که عکس در بانک ذخیره بشه ، چون راحت تره
اما اگه نشد مجبوریم که آدرس رو ذخیره کنیم
من روش فشرده کردن فایل bmp رو به jpg دارم که حدود 500 کیلو رو به 8 کیلو رسوندم
اگه دوست داری کدشو بذارم
کاربر [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]*روش*javad_rajabloo تقریبا عاقلانه ترین روشه.چون شما حجم زیادی از عکس رو در دیتابیس ذخیره نمی کنید که بخواهید از فایل استفاده کنید و در گیر ش بشید.
لطفا کاربر javad_rajabloo کد و روشتون رو براشون بزارید.
-
ضمنا من یک پروژه دارم که واستون آپش میکنم.
البته ابتدا چند نکته رو میگم.
1.دیتابیس شما SQLServer می باشد و اسکریپت مربوط به ساخت دیتابیس و جدول در فایل تکست با نام saveImage.txt
قرار داده شده.
بدین صورت :
کد:
کد:
USE master
GO
CREATE DATABASE saveImage
GO
USE saveImage
GO
CREATE TABLE personel(
[id] [int] IDENTITY(1,1) NOT NULL,
[F_name] [nvarchar](50) NULL,
[L_name] [nvarchar](50) NULL,
[pic] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
2.فایلی که با پسوند udl براتون گذاشتم به خاطر ارتباط آسان و بدون دردسر با دیتابیس هستش و البته پویا و ویزاردی (بازش کنید میگیرید که منظورم چیه )
3.سوالی داشتید در همین پست ارسال کنید ...
دانلود پروژه : [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
-
نقل قول از javad_rajabloo
کد مربوط به تبدیل اینه
var
*MyJPEG : TJPEGImage;
*MyBMP* : TBitmap;
begin
*MyBMP := TBitmap.Create;
*with MyBMP do
** try
**** {Cargamos el BMP}
**** {Load the BMP}
**** LoadFromFile("filename.bmp");
**** MyJPEG := TJPEGImage.Create;
**** with MyJPEG do begin
****** Assign(MyBMP);
****** {Grabamos el JPG}
****** {Save the JPG}
****** SaveToFile("filename.JPG");
****** Free;
**** end;
** finally
**** Free;
** end
end;
البته این کد ، فایل bmp رو به jpg تبدیل میکنه و حجمش رو خیلی پایین میاره
این کامپوننت هم یک db image هست که با اونی که داخل خود دلفی هست فرق میکنه و فرقش هم اینه که فایلهای jpg رو ساپورت می کنه
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
به خاطر کد ممنون
ولی مشکل من بعد از این شروع میشه
چون هرچقدر هم حجم عکسم کم بشه حجم دیتابیس چندین برابر اون بالا میره
-
فکر میکنم بهترین راه استفاده از fileStream باشه یه امکان هست که تو sqlserver2008وجود داره
اونطور که تو help گفته بود نباید حجم دیتابیس رو بالا ببره البته هنوز اجراش نکردم
نظرتون چیه اطلاعی درباره اش دارید؟
-
سلام.ابتدا این پادکست رو گوش کنید* : [برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
به این آدرس ها هم سر بزنید ...
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
[برای مشاهده لینک ها شما باید عضو سایت باشید برای عضویت در سایت بر روی اینجا کلیک بکنید]
-
نقل قول از hamid_re
سلام
یک روش به قول معروف "بیابونی" سراغ دارم، که البته خودم تستش کردم و می دونم که اصولی نیست ولی کار راه بندازه *و برای ایشون که مشکل حجم دیتابیس داره *خوب جواب میده .
توی این روش حجم دیتابیس خیلی اضافه نمیشه ولی سرعت خواندن عکس از دیتابیس و اضافه کردن عکس داخل دیتابیس پایین میاد - در این روش باید ابتدا عکس رو به رشته تبدیل کرد**( تعجب نکن میشه اینکارو کرد )***و رشته رو در دیتابیس قرار داد - برای خوندن عکس هم ابتدا رشته رو می خونی و بعد به عکس تبدیل می کنی - این تبدیل ها رو من با vb.net انجام دادم - کد دلفی رو ندارم کد های vb *رو قرار می دم خودت دیگه تبدیلش کن به دلفی ( اگه می تونی ) *
*
کد:
کد:
Public Function ImageToStr(ByVal ImageAdr As String) As String* * * *
* * * * * * Dim img As System.Drawing.Image = System.Drawing.Image.FromFile(ImageAdr)* * *
* * ** * * Dim ms = New System.IO.MemoryStream()*
* ** * * * img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)*
** * * * * Dim b64 As String = Convert.ToBase64String(ms.ToArray())*
* ** * * * img.Dispose()* *
* ** * * * ms.Close()* * * *
* * * * * Return b64*
* * * * End Function
Public Function StrToImage(ByVal Strb64 As String) As Image
* * * * * *Dim b() As Byte
* * * * * *b = Convert.FromBase64String(Strb64)
* * * * * *Dim ms = New System.IO.MemoryStream(b)
* * * * * *Dim img = System.Drawing.Image.FromStream(ms)
* * * * * *ms.Close()
* * * * * *Return img
* * * *End Function
کد c تبدیل به رشته و برعکس رو دیده بودم ولی نتونستم به دلفی تبدیلش کنم چون قالب تصاویر tiff است به مشکل برخوردم
-
با سلام
مهندس جان لطف فرماييد به هر روش كه صلاح بدانيد روش فشرده سازي عكس را كه حجم 500 k را به 8k برساند برايم در سايت قرار دهيد زيرا چيز با ارزشي است.ضمنا من يك پروژه در سيستمم پيدا كردم كه عكس ها را با نرم افزار دلفي در دتابيس access قرار مي دهد وظاهرا مشكلي ندارد.وشما بجاي دتا بيس access از جدول اس كيو ال استفاده كنيد شايد مسئله شما و كاربر ديگر حل شود .ضمنا پروژه را من ننوشته ام واگر لازم شد با خبرم سازيد تا در سايت آپلودش كنم .موفق باشيد