35

クライアントPCからサーバーのハードディスクに画像をアップロードするaspxページがあります

しかし今、アップロード中に画像のサイズを変更できるようにプログラムを変更する必要があります。

誰もこれについて何か考えがありますか? 入力ファイル サーバー コントロールでそのようなプロパティ/メソッドが見つかりませんでした

私を案内してくれる人はいますか?

4

14 に答える 14

15

ファイルがサーバーに保存されたら、次のようなコードを使用してサイズを変更できます。このコードは、サイズ変更時に長さと幅の比率を処理します。

public static Bitmap CreateThumbnail(string lcFilename, int lnWidth, int lnHeight)
{

    System.Drawing.Bitmap bmpOut = null;

    try
    {
        Bitmap loBMP = new Bitmap(lcFilename);
        ImageFormat loFormat = loBMP.RawFormat;

        decimal lnRatio;
        int lnNewWidth = 0;
        int lnNewHeight = 0;

        if (loBMP.Width < lnWidth && loBMP.Height < lnHeight)
            return loBMP;

        if (loBMP.Width > loBMP.Height)
        {
            lnRatio = (decimal)lnWidth / loBMP.Width;
            lnNewWidth = lnWidth;
            decimal lnTemp = loBMP.Height * lnRatio;
            lnNewHeight = (int)lnTemp;
        }
        else
        {
            lnRatio = (decimal)lnHeight / loBMP.Height;
            lnNewHeight = lnHeight;
            decimal lnTemp = loBMP.Width * lnRatio;
            lnNewWidth = (int)lnTemp;
        }


        bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
        Graphics g = Graphics.FromImage(bmpOut);
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
        g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);

        loBMP.Dispose();
    }
    catch
    {
        return null;
    }
    return bmpOut;
}
于 2008-10-31T18:33:10.493 に答える
5

画像変換を実行する前に完全な画像が必要になるため、「その場で」サイズを変更することはできません。ただし、アップロードが完了した後、結果をユーザーに表示する前に、いくつかのアプリで使用したこの基本的な画像サイズ変更方法を使用できます。

   ''' <summary>
   '''    Resize image with GDI+ so that image is nice and clear with required size.
   ''' </summary>
   ''' <param name="SourceImage">Image to resize</param>
   ''' <param name="NewHeight">New height to resize to.</param>
   ''' <param name="NewWidth">New width to resize to.</param>
   ''' <returns>Image object resized to new dimensions.</returns>
   ''' <remarks></remarks>
   Public Shared Function ImageResize(ByVal SourceImage As Image, ByVal NewHeight As Int32, ByVal NewWidth As Int32) As Image

      Dim bitmap As System.Drawing.Bitmap = New System.Drawing.Bitmap(NewWidth, NewHeight, SourceImage.PixelFormat)

      If bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format1bppIndexed Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format4bppIndexed Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format8bppIndexed Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Undefined Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.DontCare Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppArgb1555 Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppGrayScale Then
         Throw New NotSupportedException("Pixel format of the image is not supported.")
      End If

      Dim graphicsImage As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitmap)

      graphicsImage.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
      graphicsImage.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
      graphicsImage.DrawImage(SourceImage, 0, 0, bitmap.Width, bitmap.Height)
      graphicsImage.Dispose()
      Return bitmap

   End Function
于 2008-10-31T18:19:27.730 に答える
4

別のアプローチは、ユーザーがブラウザでサイズを調整してから、他の回答で説明されているように画像のサイズを変更できるようにすることです。

したがって、jQuery、jCrop、およびASP.NETを使用して画像をアップロードおよびトリミングできるこのソリューションをご覧ください。

于 2010-02-23T08:54:55.757 に答える
4

.jpg拡張子のみの画像のサイズを変更してアップロードする方法:
upload.aspxページ

    <asp:FileUpload ID="ProductImage" runat="server"/>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Upload" />
 <asp:TextBox runat="server" ID="txtProductName" CssClass="form-control" />
                        <asp:RequiredFieldValidator runat="server" ControlToValidate="txtProductName" ErrorMessage="The Product name field is required." />


サイズ変更用のupload.aspx.cs

/// <summary>
/// Created By Rajib Chowdhury Mob. 01766-306306; Web: http://onlineshoping.somee.com/
/// Complete This Page Coding On January 05, 2014
/// Programing C# By Visual Studio 2013 For Web
/// Dot Net Version 4.5
/// Database Virsion MSSQL Server 2005
/// </summary>
        public bool ResizeImageAndUpload(System.IO.FileStream newFile, string folderPathAndFilenameNoExtension, double maxHeight, double maxWidth)
        {
            try
            {
                // Declare variable for the conversion
                float ratio;
                // Create variable to hold the image
                System.Drawing.Image thisImage = System.Drawing.Image.FromStream(newFile);
                // Get height and width of current image
                int width = (int)thisImage.Width;
                int height = (int)thisImage.Height;
                // Ratio and conversion for new size
                if (width > maxWidth)
                {
                    ratio = (float)width / (float)maxWidth;
                    width = (int)(width / ratio);
                    height = (int)(height / ratio);
                }
                // Ratio and conversion for new size
                if (height > maxHeight)
                {
                    ratio = (float)height / (float)maxHeight;
                    height = (int)(height / ratio);
                    width = (int)(width / ratio);
                }
                // Create "blank" image for drawing new image
                Bitmap outImage = new Bitmap(width, height);
                Graphics outGraphics = Graphics.FromImage(outImage);
                SolidBrush sb = new SolidBrush(System.Drawing.Color.White);
                // Fill "blank" with new sized image
                outGraphics.FillRectangle(sb, 0, 0, outImage.Width, outImage.Height);
                outGraphics.DrawImage(thisImage, 0, 0, outImage.Width, outImage.Height);
                sb.Dispose();
                outGraphics.Dispose();
                thisImage.Dispose();
                // Save new image as jpg
                outImage.Save(Server.MapPath(folderPathAndFilenameNoExtension + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg);
                outImage.Dispose();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

そしてButton1_Clickイベント

        string filePath = "~\\Image\\";//your normal image path
        if (Page.IsValid)
        {
            HttpPostedFile myFile = ProductImage.PostedFile;//Get Slected Image
            int nFileLen = myFile.ContentLength;//Get slected Image Size
            string myimag = txtProductName.Text;//Get user input image name
            Guid ImageName = Guid.NewGuid();//get unique id
            if ((myFile != null) && (nFileLen > 1048576))
            {
                LabelAddStatus.Text = "minimum size exceed"; //If file image size 1 MB above
            }
            else
            {
                try
                {
                    if (ProductImage.HasFile)
                    {
                        String fileExtension = System.IO.Path.GetExtension(ProductImage.FileName).ToLower();
                        String[] allowedExtensions = { ".jpg" };//Declare For Allowed Extension
                        for (int i = 0; i < allowedExtensions.Length; i++)
                        {
                            if (fileExtension == allowedExtensions[i])
                            {
                                // Read file into a data stream
                                byte[] myData = new Byte[nFileLen];
                                myFile.InputStream.Read(myData, 0, nFileLen);
                                myFile.InputStream.Dispose();
                                // Save the stream to disk as temporary file. make sure the path is unique!
                                System.IO.FileStream newFile
                                        = new System.IO.FileStream(Server.MapPath(filePath + "_temp.jpg"),
                                                                   System.IO.FileMode.Create);
                                newFile.Write(myData, 0, myData.Length);
                                bool success = ResizeImageAndUpload(newFile, filePath + ("thumbs"+myimag + ImageName), 100, 100);//Save image your thumb image path
                                success = ResizeImageAndUpload(newFile, filePath + (myimag + ImageName), 768, 1024);//Save image your normal image path
                                //delete the temp file.
                                newFile.Close();
                                System.IO.File.Delete(Server.MapPath(filePath + "_temp.jpg"));
                                LabelAddStatus.Text = "File uploaded.";
                            }
                            else
                            {
                                LabelAddStatus.Text = "Unable to accept file type..";
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    //No Exception Message
                }
            }
        }

ありがとう...

于 2014-02-16T16:47:20.670 に答える
4

これは私のプロジェクトで行った方法です。条件(高さ/幅)に基づいて、パラメーターie(MaxHeight)を変更できます

 public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxHeight)
        {
            var ratio = (double)maxHeight / image.Height;
    
            var newWidth = (int)(image.Width * ratio);
            var newHeight = (int)(image.Height * ratio);
    
            var newImage = new Bitmap(newWidth, newHeight);
            using (var g = Graphics.FromImage(newImage))
            {
                g.DrawImage(image, 0, 0, newWidth, newHeight);
            }
            return newImage;
        }

ボタンクリック時:

protected void Button1_Click(object sender, EventArgs e)
{
  lblmsg.Text="";
  if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))
  {
    Guid uid = Guid.NewGuid();
    string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    string SaveLocation = Server.MapPath("LogoImagesFolder") + "\\" + uid+fn;
    try
    {
      string fileExtention = File1.PostedFile.ContentType;
      int fileLenght = File1.PostedFile.ContentLength;
      if (fileExtention == "image/png" || fileExtention == "image/jpeg" || fileExtention == "image/x-png")
      {
        if (fileLenght <= 1048576)
        {
          System.Drawing.Bitmap bmpPostedImage = new System.Drawing.Bitmap(File1.PostedFile.InputStream);
          System.Drawing.Image objImage = ScaleImage(bmpPostedImage, 81);
          objImage.Save(SaveLocation,ImageFormat.Png);
          lblmsg.Text = "The file has been uploaded.";
          lblmsg.Style.Add("Color", "Green");
         }
         else 
         {
           lblmsg.Text = "Image size cannot be more then 1 MB.";
           lblmsg.Style.Add("Color", "Red");
          }
       }
     else {
             lblmsg.Text = "Invaild Format!";
             lblmsg.Style.Add("Color", "Red");
           }
     }
     catch (Exception ex)
       {
          lblmsg.Text= "Error: " + ex.Message;
          lblmsg.Style.Add("Color", "Red");
       }
   }
 }
于 2012-08-17T08:02:23.680 に答える
2

リモートイメージをダウンロードするには、WebClientクラスを使用する必要があります。

その後、サイズを変更できます...GetThumbnailImageではなくDrawImageを使用してください。ビットマップとグラフィックスのハンドルは必ず破棄してください。(using {}を使用)。すべての品質設定を高に設定します。

私の人気のある画像リサイザーのソースコードを最初に確認することをお勧めします...これは、いくつかの一般的な問題領域を回避するのに役立ちます。

于 2008-11-05T21:10:52.263 に答える
1

あなたはこれを使うことができます、それは私にとって素晴らしい仕事をします. しかし、低解像度の画像はうまく処理できません。ありがたいことに、私はそれらの多くを使用していません。byte[]画像と期待される出力を送信するだけで、準備完了です。

public 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.Format32bppRgb)) 
        { 
            newImage.SetResolution(oldImage.HorizontalResolution, oldImage.VerticalResolution); 
            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.Width > oldSize.Height) 
    { 
        newSize.Width = targetSize; 
        newSize.Height = (int)(oldSize.Height * (float)targetSize / (float)oldSize.Width); 
    } 
    else 
    { 
        newSize.Width = (int)(oldSize.Width * (float)targetSize / (float)oldSize.Height); 
        newSize.Height = targetSize; 
    } 
    return newSize; 
} 
于 2010-02-22T17:34:35.857 に答える
1
//Here is another WAY fox!!! i have actually modify the code from You all. HIHI
//First, add one textBox and one FileUpload Control, and a button

//paste this in your code behind file... after public partial class admin : System.Web.UI.Page

    string OriPath;
    string ImageName;

public Size NewImageSize(int OriginalHeight, int OriginalWidth, double FormatSize)
    {
        Size NewSize;
        double tempval;

        if (OriginalHeight > FormatSize && OriginalWidth > FormatSize)
        {
            if (OriginalHeight > OriginalWidth)
                tempval = FormatSize / Convert.ToDouble(OriginalHeight);
            else
                tempval = FormatSize / Convert.ToDouble(OriginalWidth);

            NewSize = new Size(Convert.ToInt32(tempval * OriginalWidth), Convert.ToInt32(tempval * OriginalHeight));
        }
        else
            NewSize = new Size(OriginalWidth, OriginalHeight); return NewSize;
    } 



//Now, On Button click add the folwing code.

if (FileUpload1.PostedFile != null)
        {
           ImageName = TextBox1.Text+".jpg";


           OriPath = Server.MapPath("pix\\") + ImageName;

           //Gets the Full Path using Filecontrol1 which points to actual location in the hardisk :)

           using (System.Drawing.Image Img = System.Drawing.Image.FromFile(System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName)))
           {
               Size ThumbNailSize = NewImageSize(Img.Height, Img.Width, 800);

               using (System.Drawing.Image ImgThnail = new Bitmap(Img, ThumbNailSize.Width, ThumbNailSize.Height))
               {
                   ImgThnail.Save(OriPath, Img.RawFormat);
                   ImgThnail.Dispose();
               }
               Img.Dispose();
           }
}


//Enjoy. If any problem,, mail me at izacmail@gmail.com 
于 2009-02-06T00:14:13.853 に答える
0
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 を使用して挿入します。次に、System.Drawing.Imaging で提供されているGetThumnailImage()メソッドを使用します。幅と高さの値を入力すると、それに応じて縮小/拡大されます。

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

お役に立てれば。

于 2008-10-31T18:50:37.917 に答える
0

イメージ ファイルのアップロードは、ASP.NET 4.0 クライアント コールバックによって実行されます。クライアント コールバックに慣れていない場合は、ASP.Net Web ページまたは ASP.Net AJAX 更新パネルで、ページを更新せずに ASP.Net AJAX コントロール ツールキット AsyncFileUpload コントロールまたは PostBack を参照することをお勧めします。コールバックは、ユーザーがファイル フィールド コントロールを使用してファイルを選択するとすぐに発生します。

于 2012-08-09T05:28:27.867 に答える
0

ActiveX コントロールを使用して、サーバーに送信する前にサイズを変更できます。無料の ASP.net 画像アップロード コンポーネント (これは Facebook が実際に使用しているものと同じだと思います) がここにあります。

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

うまくいくかどうか教えてください。職場のプロジェクトに実装することを考えています。

編集: オブジェクトのラッパーは無料のようですが、実際のコンポーネント自体は約 200 ドルかかります。ただし、Facebookが使用しているコンポーネントと同じであることを確認しました.

于 2008-10-31T20:16:21.050 に答える
-1
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!";
    }
}
于 2012-02-15T07:22:11.707 に答える