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

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

کاربر سایت

mrpeach

عضویت از 1394/04/13

تغییر سایز عکس

  • شنبه 30 دی 1396
  • 06:50
تشکر میکنم

با سلام خدمت شما دوستان عزیز،

من یک وب سایت دارم میسازم و میخوام که داخلش عکس آپلود کنم اما می خوام قبل از آپلود کردن عکس اندازه عکس رو به 600*600 تغییر بدم.

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

Image original = Bitmap.FromFile(temp);
                var percent = (double)original.Width / w;
                var destWidth = (int)(600);
                var destHeight = (int)(600);
                var b = new Bitmap(destWidth, destHeight);
                var g = Graphics.FromImage(b);
                try
                {
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    g.CompositingQuality = CompositingQuality.HighQuality;

                    g.DrawImage(original, 0, 0, destWidth, destHeight);
                }
                finally
                {
                    g.Dispose();
                }
                b.Save(path);

حالا مشکل من اینجا شروع میشه که زمانی که عکس رو عرضی یا قدی آپلود میکنم عکس دچار کشیدگی میشه و این حالت اصلا درست نیست

شما چه راه حلی پیشنهاد می کنید که من عکس هام رو به صورت مربعی دربیارم و دچار کشیدگی نشوند هیچ فرقی ندارد چه با css و یا با کد این کار را انجام بدم

پیشاپیش ممنونم

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

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

ایمان مدائنی

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

  • شنبه 30 دی 1396
  • 10:27

از کلاس زیر استفاده کنید و trim را false کنید

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;
            }
        }

    }

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

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

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

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