Я использую PDFSharp для создания pdf-документа, однако, когда я добавляю изображения в pdf, размер файла резко возрастает, хотя я сжатие моих изображений до 300x300 пикселей и разрешение 72dpi. Когда я создаю pdf без изображений, это около 300 КБ, что отлично, но во втором я добавляю несколько изображений с этим разрешением и размером, он достигает 5 МБ. Можно добавить до 25 изображений, что сделало бы мой pdf смешной размер. У кого-нибудь есть предложения? Я разместил свой код для сжатия моих изображений ниже:Добавление изображений в pdf значительно увеличивает размер, даже если изображения 72dpi и 300x300 пикселей
//maxSize = 300x300 and mimetype can be either "image/png" or "image/jpg"
public static Bitmap CompressImage(Image currentImage, string mimeType, Size maxSize)
{
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
MemoryStream stream = new MemoryStream();
// Create a Bitmap object based on a BMP file.
myBitmap = new Bitmap(currentImage);
if (currentImage.Width < maxSize.Width && currentImage.Height < maxSize.Height)
return myBitmap;
if (myBitmap.HorizontalResolution > 72.0f || myBitmap.VerticalResolution > 72.0f)
myBitmap.SetResolution(72.0f, 72.0f);
Size compressedImageSize = new Size();
compressedImageSize = ResizeToBound(new Size(myBitmap.Width, myBitmap.Height), maxSize);
Bitmap compressedBitmap = new Bitmap(myBitmap, compressedImageSize);
myBitmap.Dispose();
// Get an ImageCodecInfo object that represents the JPEG codec.
myImageCodecInfo = GetEncoderInfo(mimeType);
// for the Quality parameter category.
myEncoder = Encoder.Quality;
// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);
// Save the bitmap as a JPEG file with quality level 75.
myEncoderParameter = new EncoderParameter(myEncoder, 75L);
myEncoderParameters.Param[0] = myEncoderParameter;
compressedBitmap.Save(stream, myImageCodecInfo, myEncoderParameters);
compressedBitmap.Dispose();
compressedBitmap = new Bitmap(stream);
return compressedBitmap;
}
Это вспомогательная функция GetEncoder
public static ImageCodecInfo GetEncoderInfo(String mimeType)
{
mimeType = mimeType.ToLower();
if (mimeType.Contains("jpg"))
mimeType = mimeType.Replace("jpg", "jpeg");
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
Это вспомогательная функция ResizeToBound.
public static Size ResizeToBound(Size image, Size boundingBox)
{
double widthScale = 0, heightScale = 0;
if (image.Width != 0)
widthScale = (double)boundingBox.Width/(double)image.Width;
if (image.Height != 0)
heightScale = (double)boundingBox.Height/(double)image.Height;
double scale = Math.Min(widthScale, heightScale);
Size result = new Size((int)(image.Width * scale),
(int)(image.Height * scale));
return result;
}
Если вы могли бы создать пример PDF, который вы создали, мы могли бы взглянуть и посмотреть, что на самом деле хранится в PDF, и что занимает пространство. Это может привести вас к правильному направлению быстрее. –