ASP.NET Загрузка изображений с изменением размера - PullRequest
34 голосов
/ 31 октября 2008

У меня есть страница aspx, которая будет загружать изображения на жесткий диск сервера с клиентского ПК

Но теперь мне нужно изменить свою программу таким образом, чтобы она позволила мне изменить размер изображения при загрузке.

У кого-нибудь есть идеи по этому поводу? Я не смог найти такие свойства / методы с управлением сервером файлов ввода

Есть ли кто-нибудь, чтобы вести меня?

Ответы [ 14 ]

0 голосов
/ 09 августа 2012

Загрузка файла изображения выполняется с помощью обратных вызовов клиента ASP.NET 4.0. Если вы не знакомы с обратными вызовами клиентов, я предлагаю вам взглянуть на ASP.Net AJAX Control Toolkit AsyncFileUpload Control без обновления страницы или PostBack на веб-странице ASP.Net или на панели обновления ASP.Net AJAX. Обратный вызов запускается, как только пользователь выбирает файл, используя элемент управления поля файла.

0 голосов
/ 15 февраля 2012
private void ResizeImage(FileUpload fileUpload)
{
    // First we check to see if the user has selected a file
    if (fileUpload.HasFile)
    {
        // Find the fileUpload control
        string filename = fileUpload.FileName;

        // Check if the directory we want the image uploaded to actually exists or not
        if (!Directory.Exists(MapPath(@"Uploaded-Files")))
        {
            // If it doesn't then we just create it before going any further
            Directory.CreateDirectory(MapPath(@"Uploaded-Files"));
        }
        // Specify the upload directory
        string directory = Server.MapPath(@"Uploaded-Files\");

        // Create a bitmap of the content of the fileUpload control in memory
        Bitmap originalBMP = new Bitmap(fileUpload.FileContent);

        // Calculate the new image dimensions
        int origWidth = originalBMP.Width;
        int origHeight = originalBMP.Height;
        int sngRatio = origWidth / origHeight;
        int newWidth = 100;
        int newHeight = newWidth / sngRatio;

        // Create a new bitmap which will hold the previous resized bitmap
        Bitmap newBMP = new Bitmap(originalBMP, newWidth, newHeight);

        // Create a graphic based on the new bitmap
        Graphics oGraphics = Graphics.FromImage(newBMP);
        // Set the properties for the new graphic file
        oGraphics.SmoothingMode = SmoothingMode.AntiAlias; 
        oGraphics.InterpolationMode = InterpolationMode.HighQualityBicubic;

        // Draw the new graphic based on the resized bitmap
        oGraphics.DrawImage(originalBMP, 0, 0, newWidth, newHeight);
        // Save the new graphic file to the server
        newBMP.Save(directory + "tn_" + filename);

        // Once finished with the bitmap objects, we deallocate them.
        originalBMP.Dispose();
        newBMP.Dispose();
        oGraphics.Dispose();

        // Write a message to inform the user all is OK
        label.Text = "File Name: <b style='color: red;'>" + filename + "</b><br>";
        label.Text += "Content Type: <b style='color: red;'>" + fileUpload.PostedFile.ContentType + "</b><br>";
        label.Text += "File Size: <b style='color: red;'>" + fileUpload.PostedFile.ContentLength.ToString() + "</b>";

        // Display the image to the user
        Image1.Visible = true;
        Image1.ImageUrl = @"Uploaded-Files/tn_" + filename;
    }
    else
    {
        label.Text = "No file uploaded!";
    }
}
0 голосов
/ 31 октября 2008

Вы можете изменить размер перед отправкой на сервер с помощью элемента управления ActiveX. Существует бесплатный компонент загрузки изображений ASP.net (я полагаю, что это тот же самый, который фактически использует Facebook), доступный здесь:

http://forums.aurigma.com/yaf_postst2145_Image-Uploader-ASPNET-Control.aspx

Дайте мне знать, если это работает, я думаю о реализации этого в моих проектах здесь на работе.

Редактировать: Похоже, что обертка для объекта бесплатна, однако сам фактический компонент обойдется вам примерно в 200 долларов. Я подтвердил, что это тот же компонент, который использует Facebook.

0 голосов
/ 31 октября 2008
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

public partial class admin_AddPhoto : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        string reportPath = Server.MapPath("../picnic");

        if (!Directory.Exists(reportPath))
        {
            Directory.CreateDirectory(Server.MapPath("../picnic"));
        }
    }

    protected void PhotoForm_ItemInserting(object sender, FormViewInsertEventArgs e)
    {
        FormView uploadForm = sender as FormView;
        FileUpload uploadedFile = uploadForm.FindControl("uploadedFile") as FileUpload;

        if (uploadedFile != null)
        {
            string fileName = uploadedFile.PostedFile.FileName;
            string pathFile = System.IO.Path.GetFileName(fileName);

            try
            {
                uploadedFile.SaveAs(Server.MapPath("../picnic/") + pathFile);
            }
            catch (Exception exp)
            {
                //catch exception here
            }

            try
            {
                Bitmap uploadedimage = new Bitmap(uploadedFile.PostedFile.InputStream);

                e.Values["ImageWidth"] = uploadedimage.Width.ToString();
                e.Values["ImageHeight"] = uploadedimage.Height.ToString();
                // Make output File Name
                char[] splitter = { '.' };
                string[] splitFile = pathFile.Split(splitter);
                string OutputFilename = splitFile[0] + "s";

                System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
                System.Drawing.Image thumbImage = uploadedimage.GetThumbnailImage(74, 54, myCallback, IntPtr.Zero);
                thumbImage.Save(Server.MapPath("../picnic/") + OutputFilename + ".jpg");
                e.Values["Thumbnail"] = "./picnic/" + OutputFilename + ".jpg";
            }
            catch (Exception ex)
            {
                //catch exception here
            }

            e.Values["Pic"] = "./picnic/" + pathFile;
            e.Values["Url"] = "./picnic/" + pathFile;
            e.Values["dateEntered"] = DateTime.Now.ToString();
        }
    }

    public bool ThumbnailCallback()
    {
        return false;
    }
}

Для вставки используется FileUpload и FormView. Затем я использую метод GetThumnailImage () , предоставленный в System.Drawing.Imaging. Вы можете ввести любые значения ширины и высоты, и они будут соответственно уменьшаться / растягиваться.

uploadedimage.GetThumbnailImage(W, H, myCallback, IntPtr.Zero);

Надеюсь, это поможет.

...