我有一种感觉,这是不可行的,但无论如何,从伟大的家伙@ stackoverflow中听到更多内容并不会有害。我们在一个系统中有一个模块,它将以前扫描过的纸张(图像以base64格式保存在数据库中)转换为Tiff或PDF文件,然后将其存储在磁盘上。客户最近请求了一项功能,允许他在磁盘上创建文件之前查看PDF或TIFF文件大小。那么,有没有什么方法可以仅从base64编码的图像中估算PDF或Tiff文件的最终大小?
答案 0 :(得分:0)
如果只是将PNG图像添加到新PDF文档的页面中,则可以做出合理的猜测。如果,您可以做一些假设。
大多数PDF编写者将提供一些基本信息,例如标题,元数据,预告片等。例如,页面词典的信息将很少。
假设使用RGB彩色PNG(如果这些纸张正在由典型的扫描仪扫描,这是一个不错的猜测),那么您就不必担心colospace转换了。同样,假设您的PDF软件不会将图像的压缩率从Flate更改为其他值,那么数据大小实际上根本就不会变动太多。
我将首先尝试创建一个新的PDF文档,该文档的页面具有所需的尺寸,以获取典型的文件大小(应该很小)。然后,您可以添加PNG的大小以大致获得预期的大小。
。(如果您将JPEG压缩作为目标,则图像数据的大小会趋于变小。听起来您的最终用户将更加关注所创建文件的最大和最小大小。)
除非您的PNG携带非常大的颜色配置文件数据或非常大的辅助块(如果从扫描仪创建,我认为这不太可能),则PDF页面上Flate压缩Image XObject流的大小不会有太大不同整个PNG本身。
如果您可以如上所述做出一些假设,则可以合理地估计要创建的PDF文件的上限。
如果您的PDF创建将在不同情况下添加其他任何内容,例如注释,文本或需要用户输入的其他内容,则估计很快将变得不可行。
当然,您总是可以在工作流程中添加一些后处理功能,以在创建PDF文件后对其进行优化,以在许多情况下进一步减小文件大小(如果用户发现估计的文件大小过大)。我的公司出售此类PDF优化technology。