2012-06-20 90 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