C# 颜色在校正后的CMYK图像中出现褪色
我正在压缩包含许多图像的pdf文件。下面是我在浏览PDF压缩时得到的代码。它适用于RBG格式的图像,但在CMYK格式的情况下,图像显示为反转颜色(作为负片)。不知何故,我能够转换反转的颜色,但图像颜色变暗了 请建议我应该如何进行。提前谢谢C# 颜色在校正后的CMYK图像中出现褪色,c#,.net,pdf,compression,itextsharp,C#,.net,Pdf,Compression,Itextsharp,我正在压缩包含许多图像的pdf文件。下面是我在浏览PDF压缩时得到的代码。它适用于RBG格式的图像,但在CMYK格式的情况下,图像显示为反转颜色(作为负片)。不知何故,我能够转换反转的颜色,但图像颜色变暗了 请建议我应该如何进行。提前谢谢 { PdfReader.unethicalreading = true; string pdfFile = @"C:\TestPdf.pdf"; PdfReader reader = new PdfReader(pdfFile);
{
PdfReader.unethicalreading = true;
string pdfFile = @"C:\TestPdf.pdf";
PdfReader reader = new PdfReader(pdfFile);
long quality = 50L;
int n = reader.XrefSize;
for (int i = 0; i < n; i++)
{
PdfObject obj = reader.GetPdfObject(i);
if (obj == null || !obj.IsStream()) { continue; }
PdfDictionary dict = (PdfDictionary)PdfReader.GetPdfObject(obj);
PdfObject pdfcolorspace = dict.Get(PdfName.COLORSPACE);
PdfName subType = (PdfName)PdfReader.GetPdfObject(dict.Get(PdfName.SUBTYPE));
if (!PdfName.IMAGE.Equals(subType)) { continue; }
PRStream stream = (PRStream)obj;
try
{
PdfImageObject image = new PdfImageObject(stream);
PdfName filter = (PdfName)image.Get(PdfName.FILTER);
if ( PdfName.JBIG2DECODE.Equals(filter) || PdfName.JPXDECODE.Equals(filter) || PdfName.CCITTFAXDECODE.Equals(filter) || PdfName.FLATEDECODE.Equals(filter))
continue;
System.Drawing.Image img = image.GetDrawingImage();
if (img == null) continue;
var ll = image.GetImageBytesType();
int width = img.Width;
int height = img.Height;
using (System.Drawing.Bitmap dotnetImg = new System.Drawing.Bitmap(img))
{
System.Drawing.Imaging.ImageCodecInfo codec = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders()[1];
System.Drawing.Imaging.EncoderParameters eParams = new System.Drawing.Imaging.EncoderParameters(1);
eParams.Param[0] = new System.Drawing.Imaging.EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality);
using (MemoryStream msImg = new MemoryStream())
{
dotnetImg.Save(msImg, codec, eParams);
msImg.Position = 0;
stream.Clear();
if (pdfcolorspace == PdfName.DEVICECMYK)
{
img.Save(msImg, ImageFormat.Jpeg);
stream.Put(PdfName.COLORSPACE, PdfName.DEVICECMYK);
}
else
{
stream.Put(PdfName.COLORSPACE, PdfName.DEVICERGB);
}
stream.SetData( msImg.ToArray(), true, PdfStream.BEST_COMPRESSION);
stream.Put(PdfName.TYPE, PdfName.XOBJECT);
stream.Put(PdfName.SUBTYPE, PdfName.IMAGE);
stream.Put(PdfName.FILTER, PdfName.DCTDECODE);
stream.Put(PdfName.WIDTH, new PdfNumber(width));
stream.Put(PdfName.HEIGHT, new PdfNumber(height));
stream.Put(PdfName.BITSPERCOMPONENT, new PdfNumber(8));
}
}
}
catch (Exception ex)
{
}
finally
{
reader.RemoveUnusedObjects();
}
}
PdfStamper stamper = new PdfStamper(reader, new FileStream(@"C:\Compress.pdf", FileMode.Create), PdfWriter.VERSION_1_5);
stamper.FormFlattening = false;
stamper.SetFullCompression();
stamper.Close();
reader.Close();
}
{
PdfReader.unethicalreading=true;
字符串pdfFile=@“C:\TestPdf.pdf”;
PDF阅读器=新的PDF阅读器(pdfFile);
长质量=50L;
int n=reader.XrefSize;
对于(int i=0;i
我确实添加了下面的代码,这在某种程度上是可行的,但pdf大小急剧增加。如果没有此选项,图像颜色将出现反转。保存(msImg,ImageFormat.Jpeg);stream.Put(PdfName.COLORSPACE,PdfName.DEVICECMYK);反转是将四色(CMYK)图像处理为三色(RGB)。将CMYK图像视为仅CMY意味着您缺少黑色通道。不过,听起来你已经搞定了那个部分。“褪色”的外观可能与颜色空间转换有关。CMYK和RGB之间没有1:1的颜色映射,所以视觉上看起来会有所不同。简单的答案是“不要转换颜色空间”。你说“pdf大小急剧增加”。这是和原来的PDF还是有反转颜色的PDF相比?谢谢Chris。PDF大小几乎与原始PDF相同。但是我想压缩这个文件,我无法理解。你能帮我解决这个问题吗。