2017-07-31 137 views
0

我想改变我的TIFF文件的分辨率提高了文件的大小,它是使用下面的代码修改成功,但它是绘制调整大小TIFF图像使用C#

后增加从74KB到828KB我的输出文件大小代码中使用:

public void Resize(string imageFile, string outputFile, int width,int height) 
    { 
     using (var srcImage = Image.FromFile(imageFile)) 
     { 
      var newWidth = (int)(width); 
      var newHeight = (int)(height); 

      using (var newImage = new Bitmap(newWidth, newHeight)) 
      { 
       using (var graphics = Graphics.FromImage(newImage)) 
       {   
        graphics.SmoothingMode = SmoothingMode.AntiAlias; 

        graphics.InterpolationMode = InterpolationMode.NearestNeighbor; 
        graphics.PixelOffsetMode = PixelOffsetMode.None; 

        graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight)); 

        newImage.Save(outputFile,ImageFormat.Tiff); 
       } 
      } 
     } 
    } 

回答

0

TIFF文件格式为无损格式,所以减少你需要使用压缩,如LZW大小。

因此,您需要在保存文件时包含这些详细信息。

ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/tiff"); 

System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Compression; 
EncoderParameters myEncoderParameters = new EncoderParameters(1); 

EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionLZW); 
myEncoderParameters.Param[0] = myEncoderParameter; 

和辅助函数来获取编码器

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; 
} 

的完整代码和更多的细节可以在这里找到:https://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoder.compression(v=vs.110).aspx

+0

没有同时使用Graphics.FromImage(文件名)增加文件大小,之后也使用编码器参数。 –

+0

你的新旧尺码是?输入是否也是TIFF格式,如果是这样,使用什么压缩? –