选择性图像压缩?

信息处理 图片 压缩 图像压缩
2022-01-30 09:48:02

如果这是这个问题的错误网站,请原谅我。这是我的问题:我正在创建一个游戏,玩家必须在整体图像中搜索隐藏的细节。我从互联网上下载了一张 11MB 的压缩照片,大小为 85MP(14000 x 6000 像素)。我在其中有一个非常小的图像(一个像素大小的数字)。这个数字的颜色和亮度与周围的像素非常匹配,因此可以融合在一起。现在,当我去保存这张图片时,压缩破坏了隐藏的数字,即使是 JPEG 12/Maximum 也是如此。这个最大压缩 JPEG 将文件大小增加到 50MB,即使原始文件只有 11MB。未压缩的保存文件 (TIF/PNG) 可达 250MB。

我可以做些什么来压缩图像,同时仍然保持数字的完整性?该数字仅包含几个像素,但添加此小数据已将文件大小增加了 25 倍。我可以访问 Photoshop 和 Gimp。在此先感谢您,如果您需要查看该文件,那么我可以提供指向它的链接(大小为 250MB 或 50MB)。

2个回答

要在不重新压缩的情况下将 JPEG 图像插入另一个图像,您可以使用带有crop 'n' drop的jpegtran版本。插入 16x16 像素 JPEG 块大小的倍数的坐标是最安全的。在命令行上:

jpegtran.exe -drop +16+16 pixelated.jpg piano.jpg out.jpg

像素化.jpg像素化.jpg

钢琴.jpg钢琴.jpg

出.jpg出.jpg

在 Gimp 中制作的差异图像仅显示黑色,因此没有有损重新压缩。

差异图像:piano.jpg 与 out.jpg差异图像:piano.jpg 与 out.jpg

差异图像:pixelated.jpg(对齐)与 out.jpg差异图像:pixelated.jpg(对齐)与 out.jpg

在这之前,您可以使用

jpegtran -crop 

将大图像中的目标区域复制到文件中进行修改。

我想知道 jpegtran 是否可以处理您的大文件。我的测试文件很小。

首先,TIF/PNG 已经被压缩了。但它是无损压缩。这意味着您的图像应该保持不变,但复杂图片的代价是更高的内存占用。

快速计算:

(14000 * 6000 * 24 / 8) / (1024 * 1024) = 240 MB

(假设 24 位深度)。

因此,您的图像似乎是纯随机噪声或出现问题并且您没有获得正确的 PNG。基于这些数据,我首先建议调整您的图像大小,因为这样的大小对于点击游戏来说简直是疯狂的。


其次,您所要求的不能按照您希望的方式完成。你自己说的:

这个数字的颜色和亮度与周围的像素非常匹配,因此可以融入其中。

JPEG 是有损的,它通过删除人眼最难区分的视觉特征来实现如此高的压缩比:相似的颜色、相似的亮度、高度本地化的数据等。它这样做是因为这样可以在保持最高质量的同时增加压缩比。

现在我想你明白了,你想要保留的正是 JPEG 旨在首先删除的内容


有几种方法可以避免这种情况:

  • 使用另一个编解码器。
  • “混合”较少,以便编解码器不会将其删除。
  • 使用诸如pngquant在 png 中实现有损压缩、调整原始图像大小等工具以保持较小的尺寸和提高质量。
  • 更改图像类型:您真的需要照片般逼真的图片吗?
  • 改变你制作程序的方式。
  • 等等

“改变你制作程序的方式”部分对我来说是最明智的。您基本上只使用原始(最好是调整大小的)图像,但在将其渲染到屏幕上之前,您需要将信息添加到您想要的位置。这比欺骗压缩算法不做它的工作要容易得多,而且它在质量和尺寸方面也是一个很好的胜利(你只需要原始图像的一个副本,而不是每个包含水印的 X 个副本)。


最后,如果您想要的是隐写术,那么这不是实现它的推荐方法。