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

时间:2013-11-13 23:11:17

标签: image-processing

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

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

最佳图像格式是什么?

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

2 个答案:

答案 0 :(得分:5)

解决方案

这是一个执行您想要的ImageMagick命令:

convert <in>.<extension> -sample 1x1 -strip <out>.<extension>

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

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

convert <in>.<extension> -dither FloydSteinberg -resize 32x32 -colors 4 -strip <out>.gif

有关更多变化,请参见下文。在测试中,GIF给出了最小的输出。

测试

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

for type in jpg gif png; do convert -strip -sample 1x1 in.jpg out.$type; done

然后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

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

为了更好地逼近~4种颜色,你可以这样做。

for type in jpg gif png; do convert -strip -sample 2x2 in.jpg out.$type; done

虽然现在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

另一种获得~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

现在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

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

dither=None dither=Riemersma dither=FloydSteinberg

和原文:

original

答案 1 :(得分:3)

如果您只使用几种确切的颜色用于图像,那么我建议使用GIF,因为它只存储放置在文件中的调色板中的颜色索引,但不是完全RGB。因此,您在Photoshop中创建一个4色的GIF图像,每个像素只有2位(或像这样) 有关索引颜色和图像格式的详细信息,可以让他们看到Indexed colors