簡體   English   中英

C#圖像壓縮-導致圖像裁剪

[英]C# Image Compression - Causing Image to Crop

我正在壓縮使用Telerik RadAsyncUpload控件上傳的圖像。

在后端,我獲取上載的文件輸入流(Stream類),並將其傳遞給此壓縮方法:

    private byte[] GetCompressedImage(Stream stream, ImageFormat format)
    {
        ImageCodecInfo imgCodec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid);

        EncoderParameters codecParams = new EncoderParameters(1);
        codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L);

        using (Bitmap bitmap = new Bitmap(stream))
        {
            using (var ms = new MemoryStream())
            {
                bitmap.Save(ms, imgCodec, codecParams);
                return ms.ToArray();
            }
        }
    }

然后,我將字節添加到代表每個上載文件的字節列表中(此控件允許多個)。 然后,將其傳遞到FTP文件夾等。

我一輩子都無法弄清楚為什么它會裁剪圖像而不是壓縮圖像。 字節較小,寬度和高度相同,並且只是不顯示圖像的任何部分。

有任何想法嗎?

我終於讓它工作了。 我將方法移入字節列表(也就是上傳的文件)的傳遞位置,並將Image對象傳遞給方法而不是流。

    /// <summary>
    /// Compress the image
    /// </summary>
    /// <param name="stream">Image stream</param>
    /// <param name="format">Image format</param>
    /// <returns>Byte array representing the image</returns>
    public static byte[] GetCompressedImage(Image original, ImageFormat format)
    {
        ImageCodecInfo imgCodec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid);

        EncoderParameters codecParams = new EncoderParameters(1);
        codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L);

        using (var bitmap = new Bitmap(original))
        {
            using (var ms = new MemoryStream())
            {
                bitmap.Save(ms, imgCodec, codecParams);
                return ms.ToArray();
            }
        }
    }

感謝您的建議!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM