对于随机大小的均匀彩色图像,最小的图像格式是什么?

时间:2016-06-17 05:57:59

标签: image svg png gif image-compression

我没有详细说明,我试图对服务器进行虚拟映像的HTTP POST,以使服务器在其数据库中创建映像的内部记录。该图像稍后将在存储中替换为应该在没有服务器知道的情况下存在的实际图像。

不幸的是,这台服务器是" smart"并验证发送给它的任何图像数据;如果它们不匹配某种图像格式(例如jpeg,gif,png等),它将拒绝随机字节。

自然,最明显的方法是发送最小的gif(1x1灰色像素; ~26个字节)。不幸的是,这个服务器保留了它所读取的图像尺寸的不可变记录......所以1x1像素的图像不会被剪切掉。

所以我的问题是,什么是我可以作为假人发送的纯色的最小缩放图像?理想情况下,由于压缩,此格式的100x100像素的完全均匀灰度图像应与大致相同颜色的1000x2000图像大致相同。

(请原谅我,如果标签不是很好;我不知道应该去哪里)

1 个答案:

答案 0 :(得分:4)

您可以通过特制的GIF文件实现您想要的效果。

GIF format允许您在文件开头的“逻辑屏幕描述符”部分中指定“逻辑屏幕宽度”和“逻辑屏幕高度”值,这些值定义图像的大小。

但是,您实际上不需要对整个图像的像素进行编码,并且任何未编码的像素都被视为透明。相反,GIF文件包含一个或多个“图像描述符”部分,其对图像的子区域的像素进行编码。这用于压缩GIF动画(仅需要对与前一帧相比改变的图像的子区域进行编码),但是它也可以用于单帧图像。所以你可以做的只是输出一个图像描述符编码图像的1x1透明像素区域,并设置逻辑屏幕宽度和高度值所需的图像大小,以创建一个任意大小的统一透明的GIF图像,为固定文件大小(42字节)。

您只需要修改this transparent 1x1 pixel GIF的字节6-9(宽度)和字节10-13(高度)。请注意,GIF使用little-endian字节顺序。

这是example file,1024 x 1024像素的透明GIF图像。

这个文件在GIMP图像编辑器中正确加载为1k×1k透明图像,但是一些文件查看器似乎将图像大小基于图像描述符的大小并将其显示为1x1像素,这是错误的据我所知。您必须测试您的服务器是否正确读取它们。