2012-06-20 91 views
3

我在JS旋轉木馬中顯示圖像。圖像尺寸非常大,所以我將它們縮小到HTML中。我做一些數學來保持寬高比。最後,儘管這些大圖像質量下降。應該注意這些圖像已經存在於服務器中,我不應該改變原始文件的大小。收縮圖像質量損失

是什麼導致質量下降?我應該堅持更小尺寸的圖像,增加將顯示的最終尺寸?這裏是幫助的代碼,最大寬度和高度目前分別爲270和180。所有這些都是C#。

// srcccccc is the image file. Can be any kind of extension jpg, png, etc. 
if (srcccccc != "") 
{ 
    Globals.NavigateURL(); 
    string path = PortalSettings.HomeDirectory + srcccccc; 
    using (System.Drawing.Image img = System.Drawing.Image.FromFile(@Server.MapPath(path))) 
    { 
     int[] newSizes = ResizeWithRatio(img); 
     contentsall += "<img src=\"" + PortalSettings.HomeDirectory + srcccccc + "\" alt=\"Image " 
      + folderidddin + "\" height=\"" + newSizes[1] + "px\"" + "\" width=\"" + newSizes[0] + "px\" />"; 
    } 
} 

// HTML is dynamically added later.... 

private int[] ResizeWithRatio(System.Drawing.Image img) 
{ 
      int[] sizes = new int[2]; 
      if (img.Width > maxWidth || img.Height > maxHeight) 
      { 
       float ri = (float)img.Width/(float)img.Height; 
       float rs = (float)maxWidth/(float)maxHeight; 
       if (rs > ri) 
       { 
        sizes[0] = (int)((float)img.Width * (float)maxHeight/(float)img.Height); 
        sizes[1] = maxHeight; 
       } 
       else 
       { 
        sizes[0] = maxWidth; 
        sizes[1] = (int)((float)img.Height * (float)maxWidth/(float)img.Width); 
       } 
      } 
      else 
      { 
       sizes[0] = img.Width; 
       sizes[1] = img.Height; 
      } 
      return sizes; 
} 
+0

的可能重複的[高質量圖像縮放C#(http://stackoverflow.com/questions/249587/high-quality-image-scaling-c-sharp) –

+0

使用這種方法,所述質量的大小調整後的圖像將取決於瀏覽器,因爲您只是在操縱圖像標記,而不是圖像本身。如果您要在服務器端調整'System.Drawing.Image'的大小,並將其作爲完全不同的圖像發送回瀏覽器,則可以控制質量。 –

回答

3

您遇到的問題是您根本沒有縮放圖像,您正在告訴Web瀏覽器拍攝全尺寸圖像並將其縮小。可悲的是,瀏覽器並不擅長這一點,我認爲只是使用一個非常簡單的算法來做到這一點。

解決方案是縮放服務器上的圖像。我建議有一個頁面處理程序以某種方式(文件名,ID等)接收圖像引用,並在輸出到客戶端之前進行大小調整。以下問題涉及到c#中的縮放。

High Quality Image Scaling Library

+0

正如我的想法。現在我要看看我們的一些服務器上傳的圖片尺寸是否合適。如果圖像質量看起來不錯,我不會擔心。我只是在尋求確認質量如此糟糕的原因。 – Mitchell