Lua - 能够使用 DCT(离散余弦变换)对 JPEG 进行编码

问题描述 投票:0回答:1

我正在寻找可以让我使用 DCT(离散余弦变换)对图像进行编码的库和/或指南,以便我可以将其放入基本的 1.0 pdf 文件中。 (仅供参考,我正在使用 https://git.catseye.tc/pdf.lua/ 创建 pdf。

我已经在互联网上搜索了一些东西,但找不到任何东西是任何人都知道使用 Lua 使用 DCT 编码 JPEG 的东西..

更新:

根据反馈,这里有一些关于我的问题的额外信息

如果打开 PDF 文件,存储的 JPEG 数据将出现在 XObject 图像中。这是一个例子。

14 0 obj
<<
/Intent/RelativeColorimetric
/Type/XObject
/ColorSpace/DeviceGray
/Subtype/Image
/Name/X
/Width 2988
/BitsPerComponent 8
/Length 134030
/Height 2286
/Filter/DCTDecode
>>
stream (binary data) endstream

/Type
表示这是一张图片。关键部分是
/Filter
值 – DCTDecode ,它表示 JPEG(JPX 显示 JPEG2000)也有效。我需要的数据是在 stream 和 endstream 之间。

我正在寻求帮助,了解如何将图像转换为所需的 DCT 格式..

pdf lua jpeg dct
1个回答
0
投票

PDF 中 DCT/JPG 的主要区别在于 PDF 中的 .jpeg 必须是“基线”,就像 1992 年一样(https://ia801003.us.archive.org/5/items/pdf320002008/PDF32000_2008 .pdf#page=42) 这就是 MS 画图(或任何命令驱动的图形应用程序)将保存为“简单”.jpeg(不是任何奇特的类型)的内容,所以右边是从 PNG 的 MSPaint 转换而来的 everyday.jpeg或任何其他复杂格式,这是在左侧由 PDF 编写器导入时完全相同的 /DCTdecode 对象。

所以如果我们从 PDF 导出图像,我们将得到 Jpeg(不是源 PNG)。如何检查它们是否相同是复制和粘贴或使用提取器。
因此,用于我的 cmd 换行的 image.jpg 是

5,757 bytes
从 PDF 图像中提取的是
5,757 bytes
,因此我们可以期待匹配。

检查它们是否是相同的二进制文件(什么进去,什么出来,对于 PDF 来说非常罕见)

C:\Apps\Programming\pdf demo>fc /B input.jpg extracted.jpg
Comparing files input.jpg and EXTRACTED.JPG
FC: no differences encountered

所以要从图像制作页面 PDF,您只需要一个标题

%PDF-1.7
%ANSI

1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj
2 0 obj <</Type/Pages/Count 1/Kids [ 3 0 R ]>> endobj
3 0 obj <</Type/Page/MediaBox [ 0 0 841.5 594.75 ]/Rotate 0/Resources 4 0 R/Contents 5 0 R/Parent 2 0 R>> endobj
4 0 obj <</XObject <</Img1 6 0 R>>>> endobj
5 0 obj <</Length 61>>
stream
1 0 0 -1 -0 594.75 cm 841.5 0 0 -594.75 0 594.75 cm /Img1 Do
endstream
endobj
6 0 obj <</Type/XObject/Subtype/Image/ColorSpace/DeviceRGB/BitsPerComponent 8/Filter/DCTDecode
/Width 1123/Height 794/Length 202537 >>stream

在 Windows 命令行或任何其他脚本语言中,可以用正确的值写入最后一行。还有一辆拖车,在那里它可能会变得凌乱。因此,尽可能多的尾巴被移到头部以保持预告片的文字最少。我已经为视频和音频做了类似的 cmd 行嵌入,所以 DCT (Jpeg) 图像应该不是问题。 (除了我更喜欢无损像素完美 PNG 并且这更难)。

这是上面标题的匹配预告片

endstream
endobj
xref
0 7
0000000000 65535 f 
0000000016 00000 n 
0000000061 00000 n 
0000000115 00000 n 
0000000228 00000 n 
0000000272 00000 n 
0000000380 00000 n 

trailer
<</Size 7/Info <</Producer (Cmd2PDF)>>/Root 1 0 R>>
startxref
203076
%%EOF

您只需要确保 startxref 是正确的

所以工作程序首先使用任何图形应用程序准备宽度高度和长度并应用尺寸,从而偏移到页眉和尾部的末尾然后简单地

copy /b 8bitHead.txt + 8bit.jpg + 8bitTail.txt 8bitColour.pdf

© www.soinside.com 2019 - 2024. All rights reserved.