Создание эскизов изображений с помощью C#

@functions{

    public void GetThumbnailView(string originalImagePath, int height, int width)
    {
        //Consider Image is stored at path like "ProductImage\\Product1.jpg"

        //Now we have created one another folder ProductThumbnail to store thumbnail image of product.
        //So let name of image be same, just change the FolderName while storing image.
        string thumbnailImagePath = originalImagePath;
        originalImagePath = originalImagePath.Replace("thumb_", "");
        //If thumbnail Image is not available, generate it.
        if (!System.IO.File.Exists(Server.MapPath(thumbnailImagePath)))
        {
            System.Drawing.Image imThumbnailImage; 
            System.Drawing.Image OriginalImage = System.Drawing.Image.FromFile(Server.MapPath(originalImagePath));

            double originalWidth = OriginalImage.Width;
            double originalHeight = OriginalImage.Height;

            double ratioX = (double)width / (double)originalWidth;
            double ratioY = (double)height / (double)originalHeight;

            double ratio = ratioX < ratioY ? ratioX : ratioY; // use whichever multiplier is smaller

            // now we can get the new height and width
            int newHeight = Convert.ToInt32(originalHeight * ratio);
            int newWidth = Convert.ToInt32(originalWidth * ratio);

            imThumbnailImage = OriginalImage.GetThumbnailImage(newWidth, newHeight,
                         new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);
            imThumbnailImage.Save(Server.MapPath(thumbnailImagePath), System.Drawing.Imaging.ImageFormat.Jpeg);

            imThumbnailImage.Dispose();
            OriginalImage.Dispose();
        }

    }

    public bool ThumbnailCallback() { return false; }

}

в другом вопросе stackowerflow я нашел этот код, и он мне очень понравился, но при его использовании возникла проблема при создании эскизов изображений, как показано ниже:

Ошибка сервера в приложении '/'.

Недостаточно памяти. Описание: Необработанное исключение произошло во время выполнение текущего веб-запроса. Пожалуйста, просмотрите стек trace для получения дополнительной информации об ошибке и месте ее возникновения. код.

Сведения об исключении: System.OutOfMemoryException: Недостаточно памяти.

Ошибка источника:

Строка 199: {

Строка 200: System.Drawing.Image imThumbnailImage;

Строка 201: System.Drawing.Image OriginalImage = System.Drawing.Image.FromFile(Server.MapPath(исходныйImagePath.ToString()));

Строка 202:

Строка 203: double originalWidth = OriginalImage.Width;

Исходный файл: c:\Inetpub\wwwroot\Lokal\Views\Stok\SatisRaporu.cshtml
Строка: 201

мое любопытство по поводу этой проблемы привело меня к деталям исключения и увидел это:

    //
    // Summary:
    //     Creates an System.Drawing.Image from the specified file.
    //
    // Parameters:
    //   filename:
    //     A string that contains the name of the file from which to create the System.Drawing.Image.
    //
    // Returns:
    //     The System.Drawing.Image this method creates.
    //
    // Exceptions:
    //   System.OutOfMemoryException:
    //     The file does not have a valid image format.-or- GDI+ does not support the
    //     pixel format of the file.
    //
    //   System.IO.FileNotFoundException:
    //     The specified file does not exist.
    //
    //   System.ArgumentException:
    //     filename is a System.Uri.
    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    public static Image FromFile(string filename);

но все мои изображения в этой папке имеют расширение «.jpg», поэтому мне это кажется странным. если я не смогу создавать эскизы из ".jpg", что еще я могу сделать?

На самом деле я хочу узнать, пытался ли кто-нибудь еще сделать это с файлами ".jpg" и столкнулся с проблемой? и если проблем не возникло, что я могу делать неправильно?

Небольшое примечание: я делаю это в представлении, используя синтаксис бритвы.Я немного разбираюсь в языке С# и совершенствую свои знания о нем каждый день.

Редактировать:

Как я вызываю функцию:

GetThumbnailView("../pics/thumb_" + (("0000000" + stocks.stockcode).Substring(("0000000" + stocks.stockcode).Length - 7, 7)) + ".jpg", 200, 200);
5
задан Berker Yüceer 27 March 2012 в 14:06
поделиться