我要做一个程序来把本来很大尺寸的图片生成宽限定在750,高为同比例缩放的图片。但是我发觉,图片的质量不是很高(应该说已经很高了,可是领导不认为,我用photoshop生成同样大小的图片的确质量比我的高,要仔细观察图片细节才看的出来),我想问得是,.net 下有没有更高质量的方法,或者有没有其他组件可以使用?http://adow.thmz.com/pk/default.html 这里有一批图片,分别是我通过程序和ps制作的同样尺寸的图片(上一张是ps生成的,下一张是.net 生成的),如果观察一些细节(比如字),的确能看出有少许不同。我用了如下的属性设置,我感觉已经是.net下最好的质量了:
Bitmap img = new Bitmap(object_width, object_height);
            img.SetResolution(72f, 72f);
Graphics gdiobj = Graphics.FromImage(img);
gdiobj.CompositingQuality = CompositingQuality.HighQuality;
gdiobj.SmoothingMode = SmoothingMode.HighQuality;
gdiobj.InterpolationMode = InterpolationMode.HighQualityBicubic;

解决方案 »

  1.   

    试试这个,我觉得质量可以public static void GenerateHighThumbnail( string oldImagePath, string oldFileName, int width, int height )
      {
        System.Drawing.Image oldImage = System.Drawing.Image.FromFile(oldImagePath + oldFileName);
        int newWidth, imgWidth;
        int newHeight, imgHeight;   //。。    System.Drawing.Image thumbnailImage = oldImage.GetThumbnailImage(newWidth, newHeight, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);
        System.Drawing.Bitmap bm = new System.Drawing.Bitmap(thumbnailImage);    //处理JPG质量的函数
        System.Drawing.Imaging.ImageCodecInfo ici = GetEncoderInfo("image/jpeg");
        if (ici != null)
        {
          System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters(1);
          ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(Encoder.Quality, (long)100);
          bm.Save(oldImagePath + "s" + oldFileName, ici, ep);      //释放所有资源,不释放,可能会出错误。
          ep.Dispose();
          ep = null;
        }
        ici = null;    bm.Dispose();
        bm = null;    thumbnailImage.Dispose();
        thumbnailImage = null;
        oldImage.Dispose();
        oldImage = null;
      }  private static bool ThumbnailCallback( )
      {
        return false;
      }
    private static ImageCodecInfo GetEncoderInfo( String mimeType )
      {
        int j;
        ImageCodecInfo[] encoders;
        encoders = ImageCodecInfo.GetImageEncoders();
        for (j = 0 ; j < encoders.Length ; ++j)
        {
          if (encoders[j].MimeType == mimeType)
            return encoders[j];
        }
        return null;
      }
      

  2.   

    我用了,好像没有什么明显的改变。
    .net下有第三方组件吗,商业的也可以。
      

  3.   

    为什么我生成的图片文件大小要比photoshop生成的同尺寸的小很多?
    同一张原图,我程序生成的缩略图只要120几k,而photoshop生成的同尺寸的却要600多k,到底在哪里损失了质量?还有什么地方可以设置呢?
      

  4.   

    photoshop里也可以设置的。如果是jpg格式,保存的时候有JPEG选项可以调整文件大小
      

  5.   

    www.wave12.com有个缩略图水印组件wsImage3.5  效果很好
      

  6.   

    ms-help://MS.MSDNQTR.v90.chs/dv_fxmclignrl/html/0e838ea1-4e7e-4334-b882-ab25df607b8b.htm
    本节内容
    如何:列出已安装的解码器
    描述如何列出计算机上的可用编码器。如何:列出已安装的解码器
    描述如何列出计算机上的可用解码器。如何:确定编码器支持的参数
    描述如何列出编码器支持的 EncoderParameters。如何:将 BMP 图像转换为 PNG 图像
    描述如何以不同的图像格式保存图像。如何:设置 JPEG 压缩级别
    描述如何更改图像的质量级别。