Kar*_*ran 6 windows linux jpeg lossless
我正在做一个项目,我需要无损地加入数千张 JPEG 图像(我不是在这里谈论无损 JPEG/JPEG 2000/JPEG-LS 格式)。
上述图像具有不同级别的色度子采样(1x1、1x2、2x1、2x2),从而导致不同的 MCU 大小(8x8、8x16、16x8、16x16 像素)。然而,在要连接在一起的任何给定图像集中,每个图像都具有相同的特征。
现在,让我们假设我只有 2 张图像。图像 #1 ( I1 ) 的大小为 256x256px,#2 ( I2 ) 的大小为 239x256px。使用 2x2 子采样,使 MCU 大小为 16x16px。因此,I2显然在右边缘有部分 MCU,因为它的宽度不能被 16 整除。(我读过所谓的“部分”MCU 实际上包含完整 MCU 的数据,但图像尺寸指示渲染器只显示相关像素并忽略/隐藏额外的像素。)
四处寻找可以帮助我完成此任务的工具,我遇到了JpegTran的修改版本,其中包含实验性无损裁剪“n”滴(剪切和粘贴)功能。我遇到的所有其他支持无损 JPEG 编辑的应用程序似乎都使用 IJG (JpegTran) 代码,所以这似乎是合乎逻辑的选择。此外,考虑到图像的绝对数量,我想要一些可以最好从命令行运行的东西,以便我可以使用脚本自动执行该过程。
不幸的是,虽然其他一切正常,但 JpegTran 似乎截断了部分 MCU,而不是保留它们。因此,在上面的示例中,最终合并的图像包含所有I1,但只有 224x256px 的I2。为什么是 224?因为 239 = 14x16+15,这意味着沿宽度有 14 个完整的 MCU,还有 1 个部分 MCU(仅比完整的 16px 少 1px)。最后 15 像素是被消隐的,导致 495x256 像素的图像在右边缘有 15 像素的空白(灰色)像素。见下图(可惜imgur重新压缩了它们):
(左) +
(对)
=
如您所见,I2的红色部分 (15px)已被 JpegTran 截断。如果 MCU 的宽度为 8px,则丢失的部分将是I2最右侧的 7px 。同样,加入I3(256x239px)*以下* I1会导致7或15px的损失,当然取决于MCU的高度:
(上) +
(底部)
=
我什至可以完成我正在尝试的事情,还是所谓的“无损”JPEG 裁剪“n”下降仅对没有部分 MCU 的图像有效?(也许这就是为什么该功能在推出十多年后仍处于“实验状态”的原因......)
在我确定这是不可能的之前,我对有损加入的建议不感兴趣。避免任何一代人的损失是我为此感到头疼的唯一原因,否则我很久以前就已经完成了这件事。另外,我对与切换图像格式相关的建议不感兴趣。我不控制图像的来源。
如果可以实现,如何实现?请记住,鉴于上述要求,建议的任何替代应用程序理想情况下都必须能够实现自动化。(但考虑到在限制条件下我什至不太可能收到有用的答案,只要它确实有效,我都会对任何应用程序建议感到满意。我总是可以查看 AutoIT/AHK 脚本或稍后的内容自动化。)
我知道大小不一的最终图像可能会导致问题,因此我已做好充分准备接受任何解决方案,即使它会导致右侧/底部出现空白(最好是黑色)填充像素。我的意思是,我不在乎I1 + I2 的大小是 49 6 x256px(1px 填充)还是 512x256px(17px 填充),只要最终图像包含来自两个源图像的所有实际图像数据,并且整个过程无损。显然填充越少(如果有)越好,但此时任何解决方案都可以。
基于 Windows 的解决方案将是完美的,但基于 Linux 的解决方案是完全可以接受的(预编译的二进制文件,如果可能的话,没有外部依赖项,而不仅仅是代码片段)。另外,请免费软件,除非付费软件可以解决问题。
归档时间: |
|
查看次数: |
1337 次 |
最近记录: |