3

I'm currently generating multiple Images and the saving them to a multi frame tiff.

Im using this code to save the tiff.

System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);

// Save the first frame of the multi page tiff
Bitmap firstImage = (Bitmap)_imageList[0];
firstImage.Save(System.IO.Directory.GetCurrentDirectory() + @"\ChargeInvoice Images\" + OrderNumber + "_Invoice.tiff", encoderInfo, encoderParameters);

encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.FrameDimensionPage);

// Add the remining images to the tiff
for (int i = 1; i < _imageList.Count; i++)
{
 Bitmap img = (Bitmap)_imageList[i];
 firstImage.SaveAdd(img, encoderParameters);
}

// Close out the file
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.Flush);
firstImage.SaveAdd(encoderParameters);

Some of the tiffs are 18+ pages and the file size is 11 MB+.

Is there a way that I can compress the tiffs to save reduce size?

It is okay if I lose some image quality.

John Saunders
  • 160,644
  • 26
  • 247
  • 397
JustinV
  • 123
  • 1
  • 6

1 Answers1

3

Add one EncoderParam for compression:

System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.SaveFlag;
System.Drawing.Imaging.Encoder compressionEncoder = System.Drawing.Imaging.Encoder.Compression;

EncoderParameters encoderParameters = new EncoderParameters(2);
encoderParameters.Param[0] = new EncoderParameter(encoder, (long)EncoderValue.MultiFrame);
encoderParameters.Param[1] =  new EncoderParameter(compressionEncoder, (long)EncoderValue.CompressionLZW);
Marthijn
  • 3,292
  • 2
  • 31
  • 48