Generating image thumbnails in ASP.NET?

前端 未结 7 1536
再見小時候
再見小時候 2020-12-08 22:02

What is the fastest and more reliable way of generating thumbnails in .NET? I need to get any image, compress it in JPEG and resize it.

I\'ve seen several examples w

相关标签:
7条回答
  • 2020-12-08 22:12

    I use ImageMagick for photo processing

    UPDATED

    Model:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.IO;
    using ImageMagickObject;
    
    namespace photostorage.Models
    {
        public class PhotoProcessing
        {
            public MagickImage ResizeImg(string filepath, string filename)
            {
                Object[] rotate = new Object[] { filepath + "/" + filename, 
                    "-auto-orient", filepath + "/" + filename };
                Object[] big = new Object[] { filepath + "/" + filename, 
                    "-resize", "800", filepath + "/" + "big_" + filename };
                Object[] middle = new Object[] { filepath + "/big_" + filename, 
                    "-resize", "400", filepath + "/" + "mid_" + filename };
                Object[] small = new Object[] { filepath + "/mid_" + filename, 
                    "-resize", "200", filepath + "/" + "small_" + filename };
                Object[] crop = new Object[] { filepath + "/small_" + filename, 
                    "-resize", "50", filepath + "/" + "crop_" + filename };
                ImageMagickObject.MagickImage img = 
                    new ImageMagickObject.MagickImage();
                img.Convert(rotate);
                img.Convert(big);
                img.Convert(middle);
                img.Convert(small);
                img.Convert(crop);
                return img;
            }
        }
    }
    

    Controller:

    PhotoProcessing resizeImg = new PhotoProcessing();
    [HttpPost]
    public string Index(params,params,params...)
    {
        var GetResize = resizeImg.ResizeImg(
            destinationFolder + "/" + curFolder, fullFileName);
    }
    
    0 讨论(0)
  • 2020-12-08 22:14

    I am using Aurigma Image Uploader tool. it's pretty nice control. but it is paid you can check aurigma

    0 讨论(0)
  • 2020-12-08 22:20

    I can't say whether this is the most efficient manner, but here is a snippet of code I wrote to produce 3 smaller images from a large image:

      private void GenerateImages(byte[] data, string extension, string filename)
      {
         // Assuming data is the original filename.
         var ms = new MemoryStream(data);
         var image = Image.FromStream(ms);
         image.Save(filename);
         ResizeImage(image, 800, 600, "large.jpg");
         ResizeImage(image, 480, 320, "medium.jpg");
         ResizeImage(image, 192, 144, "small.jpg");
      }
    
      private void ResizeImage(Image image, int width, int height, string filename)
      {
         using (var newImage = new Bitmap(width, height))
         {
            var graphics = Graphics.FromImage(newImage);
            graphics.DrawImage(image, 0, 0, width, height);
            newImage.Save(filename, ImageFormat.Jpeg);
         }
      }
    
    0 讨论(0)
  • 2020-12-08 22:30

    For intensive server-side code, I suggest you use other techniques than GDI+ that has not been designed to handle images chunk by chunk (in a streaming manner).

    You can use Windows Imaging Component or WPF for this task. There is a very good example on how to do this in a fast and - more important - scalable manner here:

    The fastest way to resize images from ASP.NET. And it’s (more) supported-ish.

    0 讨论(0)
  • 2020-12-08 22:30

    See my answer here Create thumbnail image

    There is a function on Image which returns a thumbnail like this:

    Image image = Image.FromFile(fileName);
    Image thumb = image.GetThumbnailImage(120, 120, ()=>false, IntPtr.Zero);
    thumb.Save(Path.ChangeExtension(fileName, "thumb"));
    
    0 讨论(0)
  • 2020-12-08 22:36

    This has done me fine for years:

    public static void CreateThumbnail(string filename, int desiredWidth, int desiredHeight, string outFilename)
    {
        using (System.Drawing.Image img = System.Drawing.Image.FromFile(filename))
        {
            float widthRatio = (float)img.Width / (float)desiredWidth;
            float heightRatio = (float)img.Height / (float)desiredHeight;
            // Resize to the greatest ratio
            float ratio = heightRatio > widthRatio ? heightRatio : widthRatio;
            int newWidth = Convert.ToInt32(Math.Floor((float)img.Width / ratio));
            int newHeight = Convert.ToInt32(Math.Floor((float)img.Height / ratio));
            using (System.Drawing.Image thumb = img.GetThumbnailImage(newWidth, newHeight, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailImageAbortCallback), IntPtr.Zero))
            {
                thumb.Save(outFilename, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }
    }
    
    public static bool ThumbnailImageAbortCallback()
    {
        return true;
    }
    
    0 讨论(0)
提交回复
热议问题