我在c#(。net framework 4.0)中创建了Windows服务,用于创建多页TIFF文件。 Windows servis是monitorig目录,并将目录中的单页Tiff文件合并或分割为多页TIFF文件。服务正在Windows 2012服务器上运行。
当我打开然后将提到的服务创建的TIFF文件保存在另一个图像应用程序(例如Irfan)中时。保存的文件较小。在Irfan中,我使用与原始文件相同的分辨率和压缩率进行保存。当我比较资源管理器中的文件属性时,它们具有相同的维度,dpi和压缩类型。
e.g。我在.NET中创建的多页Tiff文件有426kB,当我打开并在Irfan中保存相同的文件时,它有407kB。差异大约是20kB。对于只有一个文件,它并不重要,但我在目录中有6万个文件:(
对于TIFF创建我正在使用System.Windows.Media.Imaging它应该比System.Drawing.Imaging(GDI +)更好。
...
// load frontside of document
decoder = new TiffBitmapDecoder(imageStreamSource,BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
bitmapSourceFrontSide = decoder.Frames[currentFrame];
// load backside of document
//...
encoder = new TiffBitmapEncoder();
encoder.Compression = TiffCompressOption.Ccitt4;
CroppedBitmap tiffPage;
//...
// TIFF image can be divided to multipage tiff
tiffPage = new CroppedBitmap(bitmapSourceFrontSide, new Int32Rect(pagePosition, 0, pageFrameWidth, (int)bitmapSourceFrontSide.PixelHeight));
encoder.Frames.Add(BitmapFrame.Create(tiffPage));
if (bitmapSourceBackSide != null)
{
tiffPage = new CroppedBitmap(bitmapSourceBackSide, new Int32Rect(pagePosition, 0, pageFrameWidth, (int)bitmapSourceBackSide.PixelHeight));
encoder.Frames.Add(BitmapFrame.Create(tiffPage));
}
//... created and add all pages to tiff file let's save it
using(FileStream stream = new FileStream(FileName, FileMode.Create))
{
encoder.Save(stream);
}
你知道为什么在.NET中创建的TIFF文件有更大的尺寸吗?
谢谢
答案 0 :(得分:2)
我发现您正在使用BitmapCreateOptions.PreservePixelFormat
和TiffCompressOption.Ccitt4
MSDN说TiffCompressOption Enumeration:
Ccitt3,Ccitt4和Rle要求设置PixelFormat值 到BlackWhite。将PixelFormat设置为任何其他值将重置 压缩属性值为Default。
也许这种情况正在发生?图像B / W?如果没有尝试明确使用Lzw
或Zip
来查看它们在图片上的效果是否超出系统决定使用的默认值!
另外,imo,5%的差异并不是让人感到沮丧的事情。这意味着,不是600,000张图像,而是只能容纳570,000张图像。
答案 1 :(得分:1)
似乎差异在于.Net Framework创建的TIFF文件的内部结构。
我将.Net Framework和其他应用程序(Irfan和LibTff.NET)中创建的TIFF标签和文件结构以及.NET Framework内部潜水的TIFF文件与不同的条带和行数进行了比较。它可能是Tiff编码器的内部实现,开发人员无法改变它。它对图像质量没有影响,但文件可能会略大。
文件的主要区别在于以下结构:
对于每个条带,该条带中的字节数。存在 这个领域大大简化了缓冲的繁琐工作 压缩数据,如果条带大小合理。
对于每个条带,该条带的字节偏移量。偏移是 相对于TIFF文件的开头指定的。注意 这意味着每个条带都有一个独立的位置 其他条带的位置。此功能可能有用 编辑应用程序这个领域是读者的唯一途径 找到图像数据,因此必须存在。
每个条带的行数。图像数据被组织成 用于在数据时快速访问单个行的条带 压缩 - 尽管该字段有效,即使数据不是 压缩。