PDA

View Full Version : مشکل در ارتباط با بارگذاری تصویر



nkhozooii
سه شنبه 09 بهمن 1386, 18:38 عصر
من تصاویر مربوط به سایت خود را ( یک فروشگاه ) در یک dataList نمایش می دهم و بعد با کلیک روی آن در صفحه بعد تصویر را به صورت ماکزیمم نمایش می دهم. برای این کار مجبور شدم از هر کدام از اجناس دو تصویر ذخیره کنم . یکی تصویر کوچک مربوط به datalist و دیگری تصویر بزرگ مربوط به بزرگنمایی.( یعنی دو تصویر مشابه با سایز های مختلف چون همین جوری که ابعاد را در برنامه کنترل می کنم با وجودی که تصویر کوچک دیده می شود اما حجم تصویر بزرگ را دارد) اول سوالم اینکه آیا این کار منطقی و درست است ؟ و اینکه در موقع بارگذاری می خواهم ابعاد عکس را کنترل کنم مثلا طول و یا عرض از یک عددی بیشتر نشود و نیز حجم تصویر از یه اندازه ای بیشتر نگرد که نمی دانم چه باید بکنم . راستی من چگونه می توانم تصویر را به صورت محلی delete کنم .:عصبانی++:

mehrdad201
سه شنبه 09 بهمن 1386, 21:27 عصر
نظر شخصی من اینه:
فکر می کنم منطقی نباشه. فکر کنم شما میتونی فقط عکس اصلی رو ذخیره کنی و حالت thumbnail رو از رو همون عکس اصلی نشون بدی. (طرفیت thumbnail کمتر میشه)

اگه تو فروم سرچ کنید دوستان کد نمونه واسه ساخت thumbnail از رو تصویر اصلی رو گذاشتند.

cpu0001100110000101
سه شنبه 09 بهمن 1386, 21:52 عصر
در مورد محلی delete کردن منظورتون رو نفهمیدم برای نگهداری دو نسخه از هر عکس کار شما کاملا درسته چون در غیر این صورت پردازش حجیم وسنگین تبدیل عکس رو باید بارها تکرار کنید در مورد تغییر سایز عکس این کد در Personal Website Starter Kit روی خود Visual Studio وجود داره که کلا می تونه راهنمای خوبی برای شما باشه کد از این قراره:



private static byte[] ResizeImageFile(byte[] imageFile, int targetSize) {
using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile))) {
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)) {
using (Graphics canvas = Graphics.FromImage(newImage)) {
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}}}}

private static Size CalculateDimensions(Size oldSize, int targetSize) {
Size newSize = new Size();
if (oldSize.Height > oldSize.Width) {
newSize.Width = (int)(oldSize.Width * ((float)targetSize / (float)oldSize.Height));
newSize.Height = targetSize;
} else {
newSize.Width = targetSize;
newSize.Height = (int)(oldSize.Height * ((float)targetSize / (float)oldSize.Width));
}
return newSize;
}

mehrdad201
سه شنبه 09 بهمن 1386, 23:46 عصر
من معذرت میخوام. حواسم اصلا به پروژه نوع سایت نبود. این دوستمون حق دارند. شما دو مدل سیو کنی همون موقع ذخیره کردن بهتره. دیگه واسه هر دفعه لازم نیست عملیات پردازشی انجام بدی.

nkhozooii
چهارشنبه 17 بهمن 1386, 17:15 عصر
دوست گرامی ممکنه راجع به کد کمی راهنمایی کنید چون با وجودی که چند بار آن را خواندم چیزی دستگیرم نشد . البته عملکرد تابع CalculateDimensions را متوجه شدم ولی به نظرم این تابع اندازه تصویر را تغییر می دهد البته می توانم آن را طوری تغییر دهم که اندازه رو چک کند و پیام دهد . یک نکته دیگه اینکه من در database فقط نام تصویرم را ذخیره می کنم آن هم در یک فیلد varchar . مثلا mypic.jpeg. و آیا کد شما چک می کند که مثلا حجم از 50kb بیشتر نباشد؟

cpu0001100110000101
پنج شنبه 18 بهمن 1386, 00:17 صبح
دوست عزیز این کد عکس رو به ابعاد بر حسب پیکسل کنترل می کنه نه بایت برای کنترل سایز هر فایل پس از UPLOAD می تونید از fileuploader سایز رو بخونید و کنترل کنید.... اگر خود starterkit رو ببینید خیلی مفید هست موفق باشید

miladr
پنج شنبه 18 بهمن 1386, 02:16 صبح
اگه بشه thumbnail کردن رو با cache مخلوط کرد سودی داره ؟

cpu0001100110000101
پنج شنبه 18 بهمن 1386, 22:13 عصر
توضیح میدید متوجه منظورتون نشدم راستش... ولی در کل تجربه من می گه چیز حجیمی رو کش نکن ولی خوب شما با توجه به نوع برنامه یا وب سایت، تعداد کاربر ها و همینطور سرعت خط کاربران و توان عملیاتی سرور و خیلی چیزای دیگه باید اینجور تصمیماتو بگیرید

nkhozooii
پنج شنبه 25 بهمن 1386, 17:43 عصر
دوست عزیز من Personal Website Starter Kit را هم مطالعه کردم اما چیزی سر در نیاوردم. من می خواهم فایل را قبل از اینکه save شود و هنگامی که fileupload دارد آن را می خواند از نظر سایز کنترل کنم. اگر باز کد بهتری نبود؛ آقا من اصلا روش را عوض کنم و یک تصویر ذخیره کنم و همان موقع thumbnail آن را هم بسازم ( فکر می کنم این روش بهتر باشد چون درست است که پردازش حجیم است اما این قدر هم دیگر چک کردن نمی خواهد و این روش حتما موفق است اما روش قبل ممکن است بعد از این همه چک به کاربر پیام عدم موفقیت را بدهد و کاربر باید دوباره همه چیز را وارد کند.) لطفا راهنمایی کنید. دیگه نمی تونم برنامه را پیش ببرم.

cpu0001100110000101
پنج شنبه 25 بهمن 1386, 20:14 عصر
شما در حالت کلی قبل از تکمیل upload به سایز فایل دسترسی ندارید بعد از اتمام upload شما سایز تصویر اصلی رو چک میکنید و فرمت اون و هر چیز که براتون مهمه... اگر همه چیز درست بود از تصویر یک thumbnail هم می سازید حالا دو تا آرایه از نوع بایت داری که یکی تصویر در اندازه اصلی و دیگری thumbnail هست حالا هر دو رو در دو فیلد مجزا در دیتابیس ذخیره می کنید هر وقت که thumbnail خواستید فیلدش رو می خونید و اگر هم تصویر رو در اندازه واقعی خواستی که سراغ فیلد مربوط به اون می ری اینا به نظرم واضح اومد که توضیحی ندادم... ضمنا تو این کد ها که چیزی چک نمی شه!!!

nkhozooii
یک شنبه 28 بهمن 1386, 15:04 عصر
دوست عزیز اگر درست متوجه شده باشم من فقط یکبار آپلود دارم (آپلود از عکس با سایز اصلی آن) که بعد باید thumbnail را هم بسازم. می شود کد ساختن thumbnail را هم بگذارید؟

cpu0001100110000101
یک شنبه 28 بهمن 1386, 19:00 عصر
عزیزم شما باید دقتتون رو بیشتر کنید کدی که من برای شما گذاشتم فقط همین کار رو می کرد thumbnail می ساخت نه چک می کرد و نه به دیتا بیس وصل می شد نه کار دیگه ای می کرد....
عکس رو در قالب یه آرایه بایت میگرفت و حد اکثر سایز thumbnail رو و نتیجه رو به صورت یه آرایه بایت برمی گردوند



byte[] originalImage = FileUpload.FileBytes;
byte[] thumbnailImage = ResizeImageFile(originalImage, 100);


حالا در thumbnailImage تصویر کوچک شده به سایز کمتر از 100px * 100px وجود داره

my_blithe
دوشنبه 06 اسفند 1386, 19:23 عصر
آیا حجم تصویرم کم میشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

Neo Persian
سه شنبه 07 اسفند 1386, 13:55 عصر
یکی ار مشکلات روشی که مطرح شده اینه که شاید از عکس مورد نظر در قسمت های مختلف سایت، بیش از یک سایز بخواد استفاده بشه! و اینکه بعد از upload عکس، برای هر قسمتی که لازمه، thumbnail درست کنیم، به نظر منطقی نمیاد. شاید در 10 جا 10 جور سایز مختلف نیاز باشه!

روش پیشنهادی من اینه که در هر درخواست برای تولید thumbnail، thumbnail مورد نظر در جایی ذخیره بشه و در درخواست های بعدی وجود thumbnail با سایز مورد نظر چک بشه و در صورت وجود از ایجاد دوباره thumbnail جلوگیری بشه

my_blithe
سه شنبه 07 اسفند 1386, 22:44 عصر
آقا اگه یک نفر آموزش خوبی از ایجاد تصاویر بند انگشتی و یک پروژه نمونه بزاره خیلی بهتره تا هرکس یک گوشه کار رو بگیره و آخرشم من نابلد هیچی نفهمم و نتونم ازشون استفاده کنم....................