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

What's the smallest image format for randomly sized uniformly coloured images?

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

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

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

所以我的问题是,我可以作为虚拟对象发送的最小可能缩放纯色图像是多少?理想情况下,由于压缩,这种格式的 100x100 像素的完全均匀灰色图像应该与相同颜色的 1000x2000 图像大致相同。

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

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

GIF format 允许您在文件开头的 "Logical Screen Descriptor" 部分指定 "logical screen width" 和 "logical screen height" 值,它们定义图像的大小。

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

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

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

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