如何将任何图像缩小到<300字节

thr*_*ups 3 image-processing

我想拍摄不同大小的图像(jpg/png)并将其转换为非常小的图像文件.我将非常小的定义为300字节以下.

图像质量不是很重要(显然).我想将转换后的图像极其像素化为~4种颜色.

这个最好的图像格式是什么?

是否有ImageMagick转换命令来执行此操作?

ntc*_*tc2 5

这是一个ImageMagick命令,可以执行您想要的操作:

convert <in>.<extension> -sample 1x1 -strip <out>.<extension>
Run Code Online (Sandbox Code Playgroud)

图像质量有点受损,但正如你所说,这对你来说并不重要.

这是一个可能更有用的版本:

convert <in>.<extension> -dither FloydSteinberg -resize 32x32 -colors 4 -strip <out>.gif
Run Code Online (Sandbox Code Playgroud)

请参阅下面的更多变化.在测试中,GIF给出了最小的输出.

测试

我在1.7M测试图像上的结果in.jpg:

for type in jpg gif png; do convert -strip -sample 1x1 in.jpg out.$type; done
Run Code Online (Sandbox Code Playgroud)

然后ls给出:

-rw------- 1 collins collins 1.7M Nov 13 16:04 in.jpg
-rw------- 1 collins collins  286 Nov 13 16:07 out.jpg
-rw------- 1 collins collins   43 Nov 13 16:07 out.gif
-rw------- 1 collins collins   82 Nov 13 16:07 out.png
Run Code Online (Sandbox Code Playgroud)

所以,看起来像GIF和PNG是更好的选择,虽然JPG仍然让你低于300字节标记.

为了更好地逼近~4种颜色,你可以做到例如

for type in jpg gif png; do convert -strip -sample 2x2 in.jpg out.$type; done
Run Code Online (Sandbox Code Playgroud)

虽然现在JPG太大了:

-rw------- 1 collins collins 1.7M Nov 13 16:04 in.jpg
-rw------- 1 collins collins  423 Nov 13 17:03 out.jpg
-rw------- 1 collins collins   50 Nov 13 17:03 out.gif
-rw------- 1 collins collins   93 Nov 13 17:03 out.png
Run Code Online (Sandbox Code Playgroud)

另一种获得~4种颜色的方法,它允许我们增加输出图像的大小:

for type in jpg gif png; do
    for dither in None Riemersma FloydSteinberg; do
        convert in.jpg -dither $dither -resize 32x32 -colors 4 -strip out.$dither.$type;
    done
done
Run Code Online (Sandbox Code Playgroud)

现在GIF和一些PNG使它在300字节以下:

-rw------- 1 collins collins 1.7M Nov 13 16:04 in.jpg
-rw------- 1 collins collins 1.9K Nov 13 17:30 out.None.jpg
-rw------- 1 collins collins 2.1K Nov 13 17:30 out.Riemersma.jpg
-rw------- 1 collins collins 2.1K Nov 13 17:30 out.FloydSteinberg.jpg
-rw------- 1 collins collins  225 Nov 13 17:30 out.None.gif
-rw------- 1 collins collins  229 Nov 13 17:30 out.Riemersma.gif
-rw------- 1 collins collins  234 Nov 13 17:30 out.FloydSteinberg.gif
-rw------- 1 collins collins  263 Nov 13 17:30 out.None.png
-rw------- 1 collins collins  332 Nov 13 17:30 out.Riemersma.png
-rw------- 1 collins collins  319 Nov 13 17:30 out.FloydSteinberg.png
Run Code Online (Sandbox Code Playgroud)

例如,以下是三个输出GIF:

抖动=无 抖动= Riemersma 抖动= FloydSteinberg

原来的:

原版的