- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在这个问题的答案中:c++ decode CCITT encoded images in pdfs
指出libtiff可用于解码CCITT编码的图像。当然,我们必须预先添加一个 TIFF header 才能将 CCITT 流转换为有效的 TIFF 文件。
但是,PDF 文件中的某些图像是内嵌图像,并且没有给出它们的长度,尽管给出了它们的宽度、高度和位深。读取 PDF 的程序应该对 CCITT 流进行解码,读取(宽 * 高 * 深)位的解码数据,并且在读取数据后的任何位置,都是内嵌图像的结尾。然后它应该继续执行下一页标记命令,依此类推。
这带来了一个问题。一个 TIFF 图像文件目录必须指定图像数据的每个 strip 中有多少字节,但在解码之前我们不知道编码数据中有多少字节实际上属于图像,但我们不能在不使用 libtiff 的情况下解码图像...
有没有办法在这里使用 libtiff 或者我们是否需要自定义 CCITT 过滤器代码?
最佳答案
严格来说(是否可以使用 libtiff...?),是 .它涉及一些黑客行为,但不会太多。
事实:数据将由一个 strip 组成,因为没有任何偏移量信息,所以我们唯一的偏移量为零。我们只需要读取 strip 。
事实:这个数据是一个 W*H 1-bit 深像素矩阵的压缩。
步骤1:估计压缩流的最大可能长度。这大约是 W*H 的 15%,即 W=1000 和 H=1000,你得到 150000 字节。该值将始终大于实际值。如果我们因为找到了正确的 EI 最终图像标签而有更好的估计,那就更好了,但不是必需的。
第 2 步:构建“虚拟”TIF 文件。这将由 49 49 2a 00 AA BB CC DD
形式的标题组成, 其中 0xDDCCBBAA 是估计长度加 8;其次是我们估计的数据流;后跟一个 TIFF 目录。
第3步:TIFF目录将始终具有相同的结构;其中的一些值是偏移量,并且与 IFD 位置 0xDDCCBBAA 无关。引用 TIFF6 规范(注意字节顺序是颠倒的 - 摩托罗拉,而不是 Intel 字节序):
TIFF 6.0 Specification Final—June 3, 1992 20
Putting it all together (along with a couple of less-important fields that are discussed
later), a sample bilevel image file might contain the following fields
A Sample Bilevel TIFF File
Offset Description Value
(hex) (numeric values are expressed in hexadecimal notation)
Header:
0000 Byte Order 4D4D
0002 42 002A
0004 1st IFD offset 00000014
IFD:
0014 Number of Directory Entries 000C
0016 NewSubfileType 00FE 0004 00000001 00000000
0022 ImageWidth 0100 0004 00000001 000007D0
002E ImageLength 0101 0004 00000001 00000BB8
003A Compression 0103 0003 00000001 8005 0000
0046 PhotometricInterpretation 0106 0003 00000001 0001 0000
0052 StripOffsets 0111 0004 000000BC 000000B6(*1)
005E RowsPerStrip 0116 0004 00000001 00000010
006A StripByteCounts 0117 0003 000000BC 000003A6(*2)
0076 XResolution 011A 0005 00000001 00000696(*3)
0082 YResolution 011B 0005 00000001 0000069E(*4)
008E Software 0131 0002 0000000E 000006A6(*5)
009A DateTime 0132 0002 00000014 000006B6(*6)
00A6 Next IFD offset 00000000
Values longer than 4 bytes:
(*1) StripOffsets Offset0 00000008
(*2) StripByteCounts Count0
(*3) XResolution 0000012C 00000001
(*4) YResolution 0000012C 00000001
(*5) Software “PageMaker 4.0”
(*6) DateTime “1988:02:18 13:59:59”
tiffcp
生成的单条 TIFFG4 图像做了一些测试。 'ed 为 1-strip CCITT 格式。那里的标题略有不同(我没有看到规范所说的软件和日期时间标签)。否则它会检查。
TIFFClientOpen
,我们可以
access it as if it was a disk image .
TIFFFillStrip: Read error on strip 0; got 143151 bytes, expected 762826.
TIFFSetErrorHandler
和
TIFFSetErrorHandlerExt
我们设置自己拦截这个错误,并解析它,从而恢复
143151
信息,而不是中止。
TIFFClientOpen
的回调,但它们都非常简单:
TIFFReadWriteProc readproc(h, *ptr, n) // copy n bytes from FakeBuffer+pos into ptr, update pos to pos + n, ignore h.
TIFFReadWriteProc writeproc // Throw an error. We don't write
TIFFSeekProc seekproc // update pos appropriately
TIFFCloseProc closeproc // do nothing
TIFFSizeProc sizeproc // return total buffer size
TIFFMapFileProc mapproc // Set to NULL
TIFFUnmapFileProc unmapproc // Set to NULL
关于pdf - 当长度未知时,是否可以使用 libtiff 解码 CCITT 编码的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927639/
我对自定义 CSS 或在将图像作为 Logo 上传到页面时使用编码 block 有疑问。我正在为我的网站使用 squarespace,我需要帮助编码我的 Logo 以使其适合每个页面。一个选项是使用自
如 encoding/json 包文档中所述, Marshal traverses the value v recursively. If an encountered value implement
我必须做一些相当于Java中的iconv -f utf8 -t sjisMS $INPUT_FILE的事情。该命令在 Unix 中 我在java中没有找到任何带有sjisMS的编码。 Java中有Sh
从 PHP 5.3 迁移到 PHP 5.6 后,我遇到了编码问题。我的 MySQL 数据库是 latin1,我的 PHP 文件是 windows-1251。现在一切都显示为“ñëåäíèòå àäðå
我有一个 RScript文件(我们称之为 main.r ),它引用了另一个文件,使用以下代码: source("functions.R") 但是,当我运行 RScript 文件时,它提示以下错误:
我无法设法从 WSDL 创建 RPC/编码风格的代码 - 有谁知道哪个框架可以做到这一点? 带有 adb 和 xmlbeans 映射的 Axis2 无法正常工作(无法处理响应中的肥皂编码)直接使用 X
安装了最新版本的Node.Js()和npm包**(1.2.10)**当我运行 Express 命令来生成项目时,它向我抛出以下错误 buffer.js:240 switch (encoding &
JavaScript中有JSON编码/解码base64编码/解码函数吗? 最佳答案 是的,btoa() 和 atob() 在某些浏览器中可以工作: var enc = btoa("this is so
>>> unicode('восстановление информации', 'utf-16') Traceback (most recent call last): File "", line
我当然熟悉 java.net.URLEncoder 和 java.net.URLDecoder 类。但是,我只需要 HTML 样式的编码。 (我不想将 ' ' 替换为 '+' 等)。我不知道任何只做
有一个非常简单的 SSIS 包: OLE DB Source 通过 View 获取数据(数据库表 nvarchar 或 nchar 中的所有字符串列)。 派生列,用于格式化现有日期并将其添加到数据集(
我正在使用一个在 Node 中进行base64编码的软件,如下所示: const enc = new Buffer('test', 'base64') console.log(enc) 显示: 我正
前言 下文介绍的自定义协议仅作为学习示例,纯粹是玩具项目,没有实际可用性。无需过度关注和讨论其合理性 进行通信的双方是谁? 常见的模型 客户端-服务器,例如HTTP协议,浏览器<=>
我试图将带有日语字符的数据插入到 oracle 数据库中。事情是保存在数据库中的是一堆倒置的问号。我该如何解决这个问题 最佳答案 见 http://www.errcode.net/blogs/?p=6
当我在 java 中解压 zip 文件时,我发现文件名中出现了带有重音字符的奇怪行为。 西索: Add File user : L'equipe Technique -- Folder : spec
在网上冲浪我找到了 ExtJS 的 Ext.Gantt 插件,该扩展有一个特殊的编码。任何人都知道如何编码那样或其他复杂的形式。 Encoded Gantt Chart 最佳答案 它似乎被 Dean
我正在用C语言做一个编码任务,我进展顺利,直到读取符号并根据表格分配相应的代码的部分。我必须连接几个代码,直到它们的长度达到 32 位,为此我必须将它们写入一个文件中。这种写入文件的方法给我带来了很多
我有一个外部链接的 javascript 文件。在那个 javascript 里面,我有这个功能: function getMonthNumber(monthName){ monthName = mo
使用mechanize,我检索到一个网页的源页面,其中包含一些非ASCII字符,比如汉字。 代码如下: #using python2.6 from mechanize import Browser b
我有一个包含字母 ø 的文件。当我用这段代码 File.ReadLines(filePath) 读取它时,我得到了一个问号而不是它。 当我像这样添加编码时 File.ReadLines(filePat
我是一名优秀的程序员,十分优秀!