问题标签 [ascii85]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encoding - 为什么 Ascii85 编码不允许动态压缩?
根据维基百科:
[Ascii85 使用] ASCII 字符 33 (!) 到 117 (u) 包括在内(表示基数为 85 的数字 0 到 84),以及字母 z(作为表示 32 位 0 值的特殊情况)。
[btoa] 4.2 版为一组所有 ASCII 空格字符添加了“y”例外
虽然 0 数据可能很常见,但使用z
压缩 0 似乎是一种任意优化,并不总是有用。
y
同样,仅当原始字节包含相邻空格时才使用较少的使用。空间的 Unicode 编码实际上在 Unicode 文本20 00
中0x20202020
并不常见。
二进制数据确实经常有相邻00
的 's,但它也经常包含相邻FF
的 's。
文本数据通常包含相邻的空格,但也经常包含相邻的制表符或相邻的换行符。
似乎频率分析和使用 9 或 10 个字符(Ascii 字符 118-126/127,或v
通过~
/ DEL)来表示 9/10 最常见的 32 位值,可能会导致更好的压缩。
压缩字符到 32 位值的映射可能位于包含在<[
和之间的编码字符串的开头]>
。对于 4 个重复字节的 32 位值,32 位值可以缩写为重复的十六进制值。
例如:
二进制数据(192 字节):
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
00 00 00 00 FF FF FF FF 20 20 20 20 2D 2D 2D 2D 09 09 09 09 0D 00 0A 00
注意空格
20
、连字符2D
、制表符09
和 Unicode 回车换行符的存在0D 00 0A 00
可以编码为(79 字节)
<[00;FF;20;2D;09;0D000A00]><~vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|vxyz{|~>
使用这种压缩的编码方法有优点吗?为什么各种 Ascii85 规范在压缩方面没有更具侵略性?
zlib - 在 .eps 文件中解码和解压缩 AI9_DataStream
上下文:我正在尝试自动检查 eps 文件以检测属性列表,例如文件是否包含锁定层、嵌入的位图图像等。
到目前为止,我们已经发现其中一些东西可以通过检查原始 eps 文件数据及其随附的元数据(类似于imagemagick返回的信息)来检测。但是似乎在 illustrator 9 及更高版本创建的文件中,绝大多数此信息编码在文件的“AI9_DataStream”部分中。此数据通过ascii85编码并压缩。我们发现通过使用https://github.com/huandu/node-ascii85来解码和节点zlib
库来解压缩/解压缩,在获取这些数据方面取得了一些成功。(我们的项目是用 node / javascript 编写的)。然而,似乎在我们大约一半的测试用例/文件中,解压缩部分失败,抛出Z_DATA_ERROR
/“不正确的数据检查”。
我们负责尝试解码的方法:
我想知道是否有人对这个问题有任何经验,并对可能导致此问题的原因有所了解,以及是否有另一种途径可以探索可靠地解码这些数据。关于这个主题的信息似乎有点稀少,所以任何能让我们朝着正确方向前进的东西都会非常感激。
注意:ascii85 解码产生的缓冲区都具有相同的78 9c
标头,这应该表明标准 zlib 压缩(实际上它确实在大约一半的时间内解压缩为可解析数据而没有错误)
jpeg - 交换 .eps 文件中的图像?
我试图弄清楚如何用 jpeg 交换嵌入在 .eps 文件中的图像。我的“模板”.eps 文件包含几个看起来像这样的部分,每个部分代表不同的图像:
据我所知,图像文件是 ASCII85 编码的,但我无法找到一种方法来编码 jpeg 图像以便我可以将其换掉。
为了澄清这种情况,我有 .eps 和原始文件。ASCII85 解码 .eps 中的图像块与 jpeg 中的信息不匹配,反之亦然。
[更新]
我的最终目标是在不使用 adobe 脚本语言的情况下创建一个带有图层的 .eps。我们为客户创建决赛,然后我们需要将其添加到打印机给我们的模板(.eps 文件)中。所有的决赛都应该是相同的,并包含相同的配色方案(CMYK)。
在 .eps 文件中,其中一层(Adobe Illustrator 可以读取)包含需要打印的图稿;另一层包含“专色”的切割线,打印机将其用作切割机的说明。我的目标是自动化模板过程,这样我们就不需要为打印机手动创建 .eps 文件。
一个简单的查找/替换似乎是实现我的目标的最简单方法,但我并不认同这个想法。迄今为止,imagemagick、graphicsmagick 和pillow 等图像库都让我失望了。
[更新]
根据要求,这是模板的图像: 有四个不同的黑色图像,正如您猜测的那样,它们在切割线之间的中点相遇。在“模板化过程”(可能是一个糟糕的词选择)期间,我们将为我们的客户生成的艺术品 - 决赛 - 并将其放置在黑色图像所在的位置。整个过程是手动的、乏味的,并且应该可以自动化——这就是我正在尝试做的事情。
javascript - 将二进制/十六进制转换为 Base91 / Ascii85 / Base64
我需要一个 JS 编码器到 base91 或 Ascii85 来获取二进制数。我确实有一个谷歌表,如下所示:
代码是:
目前对十六进制的编码效果很好——但我需要一种更有效的方法来编码这个二进制标志。
目的:这种编码模式将来可能是产品/备件名称的一部分,其中我最多有 5-6 个字符(就像 80 年代的 :D 一样)。
Ascii85 会很棒,因此'ffffffff' 的表示是' s8W-!' 我会保存 3 个字符。对于测试/编码,我使用了 cryptii。
解决方案应该是没有外部依赖/要求的纯 JS 和/或应该能够在 Google 的环境中运行。您知道我可以为此目的使用的任何库吗?Base91 也可以——只要我们有可打印的字符。完美的解决方案将是可配置的 JS 编码器/解码器 - 可以预先选择用于编码的模式和字符。
更新:
发现 Ascii85 或 Base91 或不适合宣布每部手机的代码 - 因此您不想在键盘上轻松找到所有字符。确实,base64 效率较低,但通过调整要求,我能够找到最大的解决方案。实验几天后4-5个字符。我将尝试回答我自己的问题 - 见下文。更新要求:
- 16 位有效载荷
- 4 位(编号 1..15)用于家庭/配方/类型选择
- CRC4 4 位
- base64 编码,没有外部依赖和可调整的字母表
python - Python 模拟的 ASCII85 编码的“Adobe 实现”是什么?
在base64模块的文档中,该base64.a85encode
函数带有一个adobe
参数,描述如下:
adobe 控制编码的字节序列是否用 <~ 和 ~> 框起来,Adobe 实现使用它。
这个 Adobe 实施是什么?PostScript和PDF参考仅要求 ASCII85 编码的数据以 结尾,~>
而不是它也以 . 为前缀<~
。
adobe - 未由 Acrobat Distiller 转换但由 GhostScript 转换的 PostScript 文件
我有一个已转换为 PostScript 的 JPEG 文件jpeg2ps
(JPEG 图片在 PostScript 文件中以 ASCII85 编码,它只是一个包装器)。
生成的 PostScript 文件是image.ps。
转换为 PDF 时,Adobe Distiller 会创建一个空白图像,而使用 GhostScript 时,文件会转换为预期的输出。