Using C# how can I resize a jpeg image?

后端 未结 4 1621
别那么骄傲
别那么骄傲 2020-12-16 20:25

Using C# how can I resize a jpeg image? A code sample would be great.

相关标签:
4条回答
  • 2020-12-16 20:28

    Good free resize filter and example code.

    http://code.google.com/p/zrlabs-yael/

        private void MakeResizedImage(string fromFile, string toFile, int maxWidth, int maxHeight)
        {
            int width;
            int height;
    
            using (System.Drawing.Image image = System.Drawing.Image.FromFile(fromFile))
            {
                DetermineResizeRatio(maxWidth, maxHeight, image.Width, image.Height, out width, out height);
    
                using (System.Drawing.Image thumbnailImage = image.GetThumbnailImage(width, height, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero))
                {
                    if (image.Width < thumbnailImage.Width && image.Height < thumbnailImage.Height)
                        File.Copy(fromFile, toFile);
                    else
                    {
                        ImageCodecInfo ec = GetCodecInfo();
                        EncoderParameters parms = new EncoderParameters(1);
                        parms.Param[0] = new EncoderParameter(Encoder.Compression, 40);
    
                        ZRLabs.Yael.BasicFilters.ResizeFilter rf = new ZRLabs.Yael.BasicFilters.ResizeFilter();
                        //rf.KeepAspectRatio = true;
                        rf.Height = height;
                        rf.Width = width;
    
                        System.Drawing.Image img = rf.ExecuteFilter(System.Drawing.Image.FromFile(fromFile));
                        img.Save(toFile, ec, parms);
                    }
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-16 20:33

    C# (or rather: the .NET framework) itself doesn't offer such capability, but it does offer you Bitmap from System.Drawing to easily access the raw pixel data of various picture formats. For the rest, see http://en.wikipedia.org/wiki/Image_scaling

    0 讨论(0)
  • 2020-12-16 20:37

    I'm using this:

     public static void ResizeJpg(string path, int nWidth, int nHeight)
        {
            using (var result = new Bitmap(nWidth, nHeight))
            {
                using (var input = new Bitmap(path))
                {
                    using (Graphics g = Graphics.FromImage((System.Drawing.Image)result))
                    {
                        g.DrawImage(input, 0, 0, nWidth, nHeight);
                    }
                }
    
                var ici = ImageCodecInfo.GetImageEncoders().FirstOrDefault(ie => ie.MimeType == "image/jpeg");
                var eps = new EncoderParameters(1);
                eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
                result.Save(path, ici, eps);
            }
        }
    
    0 讨论(0)
  • 2020-12-16 20:46

    Nice example.

    public static Image ResizeImage(Image sourceImage, int maxWidth, int maxHeight)
    {
        // Determine which ratio is greater, the width or height, and use
        // this to calculate the new width and height. Effectually constrains
        // the proportions of the resized image to the proportions of the original.
        double xRatio = (double)sourceImage.Width / maxWidth;
        double yRatio = (double)sourceImage.Height / maxHeight;
        double ratioToResizeImage = Math.Max(xRatio, yRatio);
        int newWidth = (int)Math.Floor(sourceImage.Width / ratioToResizeImage);
        int newHeight = (int)Math.Floor(sourceImage.Height / ratioToResizeImage);
    
        // Create new image canvas -- use maxWidth and maxHeight in this function call if you wish
        // to set the exact dimensions of the output image.
        Bitmap newImage = new Bitmap(newWidth, newHeight, PixelFormat.Format32bppArgb);
    
        // Render the new image, using a graphic object
        using (Graphics newGraphic = Graphics.FromImage(newImage))
        {
            using (var wrapMode = new ImageAttributes())
            {
                wrapMode.SetWrapMode(WrapMode.TileFlipXY);
                newGraphic.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
            }
    
            // Set the background color to be transparent (can change this to any color)
            newGraphic.Clear(Color.Transparent);
    
            // Set the method of scaling to use -- HighQualityBicubic is said to have the best quality
            newGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
    
            // Apply the transformation onto the new graphic
            Rectangle sourceDimensions = new Rectangle(0, 0, sourceImage.Width, sourceImage.Height);
            Rectangle destinationDimensions = new Rectangle(0, 0, newWidth, newHeight);
            newGraphic.DrawImage(sourceImage, destinationDimensions, sourceDimensions, GraphicsUnit.Pixel);
        }
    
        // Image has been modified by all the references to it's related graphic above. Return changes.
        return newImage;
    }
    

    Source : http://mattmeisinger.com/resize-image-c-sharp

    0 讨论(0)
提交回复
热议问题