簡體   English   中英

減小大圖像尺寸的最安全方法

[英]Safest Way to Reduce Size of Large Images

我在這里和其他網站上花費了大量時間,試圖找到一種對圖像進行重采樣的好方法。 下面的代碼是我正在使用的代碼

public static Bitmap ResampleImage(Image img, Size size, long quality) {
        try {
            var bmp = new Bitmap(size.Width, size.Height, PixelFormat.Format32bppPArgb);
            using (var gr = Graphics.FromImage(bmp)) {
                gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                gr.DrawImage(img, new Rectangle(Point.Empty, size));
            }

            return setImageQualityLevel(bmp, quality);
        }
        catch (Exception ex) {
            logger.Warn(string.Format("Image Resample Failed:\r\n{0}\r\n{1}", ex.Message, ex.StackTrace));
                return (Bitmap)img;
        }
    }

不幸的是,它通常無法觸發catch塊。 通常情況下,這與大圖像(最大20Mb)有關-這些大小在我的應用程序中沒有好處,但我不想對用戶說-在嘗試使用它之前將其減小到1Mb。 在使用以下方式加載圖像時,我也會遇到OOM失敗:

image2Use = new Bitmap(image.Filename);

因此,即使在將其放入重新采樣代碼之前,它仍會失敗。

因此,我真正要尋找的是一種獲取圖像並調整其大小的安全方法。 我寧願不花錢使用第三方庫,因為這是我要做的全部-加載大圖像文件並使它小很多!

請考慮使用第三方。

ImageMagick具有C#接口

他們有一個很好的convert命令行實用工具,可以完全滿足您的需求。

我使用它們已有幾年了,它們在不同環境(Windows桌面一直到* nix服務器)中的易用性和功能給我留下了深刻的印象。

由於它僅在大圖像上發生...並且假設您的過程在圖像上傳后立即開始...

在您的過程開始對其進行處理之前,圖像可能尚未完成復制。

要進行驗證,請手動復制其中一張大圖像。 然后,開始處理。 如果可行,您將知道過程正常。

暫無
暫無

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

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