PDA

View Full Version : سوال: تغییر سایز عکس قبل از ذخیره در دیتابیس



barman.ar16
دوشنبه 30 مهر 1397, 17:51 عصر
سلام دوستان
من یه برنامه سی شارپی دارم که از دیتابیس sqlite داخلش استفاده می کنم
برای ذخیره عکس کارمندان از روش زیر استفاده می کنم

اول با این متد عکس رو تبدیل به byte می کنم و داخل دیتابیس ذخیره می کنم (نوع ستون عکس در دیتابیس رو از نوع blob میگیرم)


private byte[] ConvertImageToByte(string ImageLocation)
{
FileStream fs = new FileStream(ImageLocation, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] picture = null;
FileInfo fInfo = new FileInfo(ImageLocation);
long numBytes = fInfo.Length;
picture = br.ReadBytes(Convert.ToInt32(numBytes));
return picture;
}


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


...
...
SQLiteDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
byte[] picbyte = reader["image"] as byte[] ?? null;
if (picbyte != null)
{
MemoryStream mstream = new MemoryStream(picbyte);
frame.Image = System.Drawing.Image.FromStream(mstream);
{
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(mstream);
}
}
}


خب مشکلی هم باهاش ندارم فقط میرسم به بحث سایز عکس
برای جلوگیری از بالا رفتن حجم دیتابیس میخوام قبل از ذخیره عکس اون رو ریسایز کنم تا نهایتا هر عکس بیشتر از 100 کیلوبایت نشه
خیلی جستجو کردم چند تا روش دیدم یکی کاهش حجم عکس از طریق quality هست که اون به کارم نمیومد چون مثلا عکسی اگر حجمش 6 مگ باشه ما quality رو 50l بدیم میشه 2 مگ که به درد من نمیخوره
روش دیگه تغییر سایز عکس هست که اون هم به نتیجه نرسیدم
ممنون میشم یک راه حلی بفرمایید

در ضمن اولش فکر کردم هنگام انتخاب عکس سایز رو چک کنم اگر بالاتر از اونی که میخواستم بود خطا بگیرم اما خب اینطوری خود کاربر بره سایز عکس رو دستی تغییر بده که ماشالله کاربرها هم همگی ناشی و کارنابلد هستند پس چه بهتر خودم تغییر سایزش بدم

ممنون

barman.ar16
سه شنبه 01 آبان 1397, 23:11 عصر
ممنون میشم از دوستان اگر کسی اطلاعاتی داره راهنمایی کنه
متشکرم

رامین مرادی
چهارشنبه 02 آبان 1397, 09:20 صبح
به نظرم همون کاربر رو ملزم به رعایت وارد کردن عکس با حداکثر حجم مجاز بکنید.
سایتهای ثبت نام رو مشاهده کنید. حالا کاربر بلد یا نابلد هم باشه مجبوره با یه روشی حجم عکس رو کم بکنه. یا خودتونم میتونید یه ادیتور مثلا کراپ کردن عکس یا یه چیزی شبیه اون بسازید و همنجا که عکس رو کاربر میده براش حالت ویرایش عکس هم بزارید. این موردو تو اپلیکشن دیوار من دیدم.

یه روشی هم اینه که بجای ذخیره خود عکس، اونو تبدیل به base64 کنید و به صورت رشته تو بانک ذخیره کنید. بعد موقع استفاده دوباره تبدیل به عکس کنید و نشون بدید.

این دوتا لینکم مطالعه کنید
https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-set-jpeg-compression-level
و
https://www.codeproject.com/Questions/1197317/Reduce-the-image-to-specified-size-while-uploading