مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

sadegh.te

عضویت از 1393/05/11

تغییر اندازه تصویر در زمان لود صفحه

  • سه شنبه 6 مهر 1395
  • 16:13
تشکر میکنم

سلام دوستان

چطور میتونم زمانی که سایتم لود میشه تصاویر صفحه رو به اندازه دلخواه تغییر بدم؟

مثلا از اون تصویر یه نمونه تو هاست دارم و مسیرشم تو دیتابیس ذخیره شده میخوام اون عکس برای قسمت پر بازدیدها اندازش بشه 100* 100 ولی تو قسمات پست صفحه اندازش بشه 200 * 200 چطور باید این کارو انجام بدم؟

ممنون.

پاسخ های این پرسش

تعداد پاسخ ها : 10 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • سه شنبه 6 مهر 1395
  • 17:30

بهتره بعد از آپلود تغییر سایز دهید

با کلاس زیر میتونید انجام دهید

using System;
using System.Drawing;
using System.Drawing.Imaging;

namespace InsertShowImage
{
        public class ImageResizer
        {
            /// <summary>
            /// http://www.blackbeltcoder.com/Articles/graph/programmatically-resizing-an-image
            /// Maximum width of resized image.
            /// </summary>
            public int MaxX { get; set; }

            /// <summary>
            /// Maximum height of resized image.
            /// </summary>
            public int MaxY { get; set; }

            /// <summary>
            /// If true, resized image is trimmed to exactly fit
            /// maximum width and height dimensions.
            /// </summary>
            public bool TrimImage { get; set; }

            /// <summary>
            /// Format used to save resized image.
            /// </summary>
            public ImageFormat SaveFormat { get; set; }

            /// <summary>
            /// Constructor.
            /// </summary>
            public ImageResizer()
            {
                MaxX = MaxY = 150;
                TrimImage = false;
                SaveFormat = ImageFormat.Jpeg;
            }

            /// <summary>
            /// Resizes the image from the source file according to the
            /// current settings and saves the result to the targe file.
            /// </summary>
            /// <param name="source">Path containing image to resize</param>
            /// <param name="target">Path to save resized image</param>
            /// <returns>True if successful, false otherwise.</returns>
            public bool Resize(string source, string target)
            {
                using (Image src = Image.FromFile(source, true))
                {
                    // Check that we have an image
                    if (src != null)
                    {
                        int origX, origY, newX, newY;
                        int trimX = 0, trimY = 0;

                        // Default to size of source image
                        newX = origX = src.Width;
                        newY = origY = src.Height;

                        // Does image exceed maximum dimensions?
                        if (origX > MaxX || origY > MaxY)
                        {
                            // Need to resize image
                            if (TrimImage)
                            {
                                // Trim to exactly fit maximum dimensions
                                double factor = Math.Max((double)MaxX / (double)origX,
                                    (double)MaxY / (double)origY);
                                newX = (int)Math.Ceiling((double)origX * factor);
                                newY = (int)Math.Ceiling((double)origY * factor);
                                trimX = newX - MaxX;
                                trimY = newY - MaxY;
                            }
                            else
                            {
                                // Resize (no trim) to keep within maximum dimensions
                                double factor = Math.Min((double)MaxX / (double)origX,
                                    (double)MaxY / (double)origY);
                                newX = (int)Math.Ceiling((double)origX * factor);
                                newY = (int)Math.Ceiling((double)origY * factor);
                            }
                        }

                        // Create destination image
                        using (Image dest = new Bitmap(newX - trimX, newY - trimY))
                        {
                            Graphics graph = Graphics.FromImage(dest);
                            graph.InterpolationMode =
                                System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                            graph.DrawImage(src, -(trimX / 2), -(trimY / 2), newX, newY);
                            dest.Save(target, SaveFormat);
                            // Indicate success
                            return true;
                        }
                    }
                }
                // Indicate failure
                return false;
            }
        }

    }

 

کاربر سایت

sadegh.te

عضویت از 1393/05/11

  • سه شنبه 6 مهر 1395
  • 19:12

ممنون استاد

بله منم قصدم همینه که بعد از آپلود این کارو انجام بدم.

ولی چطور باید از این کلاس استفاده کنم؟

مثلا من 30 تا خبر رو از دیتابیس میخونم چطور باید مسیر اون 30 تا عکس رو بدم به این کلاس که برام تبدیل کنه؟

ممنون.

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 7 مهر 1395
  • 09:05

شما باید در لحظه ثبت خبر در بانک تصویر را تغییر سایز دهید و Thum تصویر را نیز ذخیره کنید

کافیست از کلاس فوق نمونه بسازید و از متد Resize استفاده کنید

کاربر سایت

sadegh.te

عضویت از 1393/05/11

  • چهارشنبه 7 مهر 1395
  • 10:04

استاد این کار حافظه سرور رو اشغال میکنه چون من دو یا سه سایز مختلف از اون عکسو لازم دارم.

بهتر نیست وقتی کاربر صفحه رو لود میکنه عکس اصلی رو بگیریم و براش تغییر سایز بدیم ؟

که فکر کنم این روش هم تاثیر مستقیم رو کاهش سرعت داره درسته؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 7 مهر 1395
  • 10:14

اینجوری بیشتر حافظه سرور اشغال میشه

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

کاربر سایت

sadegh.te

عضویت از 1393/05/11

  • چهارشنبه 7 مهر 1395
  • 11:01

خوب من تو دیتابیس به ازای هر خبر فقط یک آدرس تصویر ذخیره میکنم ولی این روشی که شما میگین مثلا من عکسو تو دو سایز مختلف لازم دارم پس باید مسیر دو تا عکسو ذخیره کنم درسته؟

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 7 مهر 1395
  • 11:15

شما بهتره نام رو فقط ذخیره کنید

اینطوری میتونید در صورت نیاز تصویر اصلی یا کوچک شده را بدسن بیارید

کاربر سایت

sadegh.te

عضویت از 1393/05/11

  • چهارشنبه 7 مهر 1395
  • 11:25

ممنون استاد

فقط اگه میشه یه توضیح کوچیک بدین که چطور میتونم فقط با ذخیره نام تصویر اونو با دو حالت بازیابی کنم؟

تشکر.

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 7 مهر 1395
  • 11:33

کافیست تصاویر را با یک نام در دو دایرکتوری ذخیره کنید

ما اینگونه کار میکنیم مثلا یک پوشه با نام ProductImages و داخلش دو پوشه با نام های Image و thumb میسازیم

کاربر سایت

sadegh.te

عضویت از 1393/05/11

  • چهارشنبه 7 مهر 1395
  • 11:42

خیلی ممنون از از راهنماییتون استاد.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)