如何打印非常大的图像,或者至少以合理的方式保存非常大的图像?

时间:2012-10-29 20:52:38

标签: image image-processing printing

我不确定如何标记这个问题所以如果您认为它们适用,我想添加标签。

我有一个相当大的矩阵,我被要求绘制并可能打印出海报。它的尺寸是70K。即我有一个70,000平方的数组,我必须绘制它将每个元素的值映射到某种颜色。这不是困难的部分,我可以这样做。

问题是,如何以合理的方式保存这样的图像?

我意识到这非常依赖于图像的特定属性。我认为这个形象在这方面可能会有问题。它显然很有趣的原因是因为它本质上是分形的。很多图像只是白色,如果这会有帮助......

然后,如果我确实打印出来,那么即使在2400dpi,它也将是一个米平方,每个矩阵元素只有1个像素。它会看起来有什么好处吗?或者它看起来像一个可怕的烂摊子? (问的一个原因是我不能去打印并看到它,因为它可能浪费50英镑!)

2 个答案:

答案 0 :(得分:1)

我不知道您的数据看起来如何,但我可以想到一些好方法:

  1. 运行长度编码 - 逐行显示交替模式中有多少黑色,多少白色,黑色,白色。
  2. 坐标列表 - 如果您的人口稀少,您只需列出填写的坐标。
  3. 白拳 - 这就像一次列出一个位(在你的70k乘70k将是大约4.9b位),除了它首先列出只有白色的大矩形区域。当列出的位时,它会跳过初始列表框中的任何位。当他们被读入时,它知道也可以跳过框中的内容。这里有12个字节(每个坐标3个),可以表示20×20个盒子(400位)或更大。这将是大约10%的压缩。如果你能得到一个200x200的盒子,你就会看到1%的压缩。
  4. 对于RLE,假设您使用16位作为样本大小。因此,如果您的其中一行开头如下:1245 white, 2 black, 100 white, 1 black, 834 white您可以对此进行编码(十六进制)04dd0002006400010342(请注意,004d是十六进制的1245,等等...)。现在使用80位代表2182位,或大约3.6%的压缩率。

    但不是自己滚动...我建议,如果可以的话,只需使用... PNG!

    我制作了一个7k乘7k(或总面积的1/100)的随机文件。它每100个白色随机分布1个黑色。它出现了677k,或大约11.3%的压缩率。

    我将它提升到20k x 20k(约占你总面积的1/12),并且它的随机分布为100:1。它的大小为5.4Mb,或大约11.1%的压缩。

    因此,如果您的黑到白是1:100,我打赌您能够以大约11%的所需位数或600Mb以下的方式表示您的文件。

答案 1 :(得分:0)

人眼开始失去在大约300 DPI时看到单个像素的能力,因此拥有比这更高分辨率的图像没有意义。因此,这成为如何降低图像分辨率的练习。每像素3个字节,原始版本需要14.7GB,因此大多数现成的解决方案都不太可行。

我假设你可以按顺序读取数据,这样就不需要同时将它全部存储在内存中。

一种简单的缩减方法是一次读取8行,然后平均每个8x8区域以产生一个输出像素。这会产生一个8750 x 8750的图像,这个图像仍然很大但在理性范围内。

有一些调整大小的方法可以产生比平均值更好的结果,可以在原始的滑动窗口上运行。重叠窗口最好能产生无缝结果。