<p>简单回答“如果Python中有一种方法可以在补丁中写入png或tiff文件?”。好吧,是的——只要有足够的时间和技能来实现它,在Python中一切都是可能的。另一方面,不,没有现成的解决方案-因为它似乎不是很有用。在</p>
<p>我不知道TIFF,这里有一条评论说它的容量限制在4GB,所以这种格式可能不是一个好的选择。PNG没有实际的限制,<strong>可以</strong>被写成块,所以理论上是可行的——前提是至少有一条扫描线可以放入内存中。在</p>
<p>如果您真的想继续这项工作,以下是您需要的信息:
PNG文件由几个元数据块和一系列图像数据块组成。后者是相互独立的,因此您可以通过简单地将它们的图像数据块(IDAT)连接在一起并添加所需的元数据块(您可以从第一个小图像中选择这些块,除了IHDR块-需要构建一个包含最终图像大小的块)。在</p>
<p>因此,如果我必须这样做(注意,您需要了解Python的<code>bytes</code>类型以及在Python数据类型之间转换字节序列的方法,以实现这一点):</p>
<ul>
<li><p>找出我可以放入内存的行数,并将其作为“小图像块”的高度。宽度是整个最终图像的宽度。让我们称之为<code>width</code>和<code>small_height</code></p></li>
<li><p>在h5py中逐个查看我的巨大数据集(<code>width * small_height</code>),将其转换为PNG并将其保存到磁盘的一个临时文件中,或者如果您的图像转换库允许的话-直接将其转换为内存中的<code>bytes</code>字符串。然后按如下方式处理字节数据,并在末尾删除:</p>
<p>在第一次迭代中:一次遍历一个PNG数据记录(参见PNG规范:<a href="http://www.libpng.org/pub/png/spec/1.2/png-1.2-pdg.html" rel="nofollow noreferrer">http://www.libpng.org/pub/png/spec/1.2/png-1.2-pdg.html</a>,它是长度标记值形式,非常容易编写代码,可以有效地逐个记录地遍历文件),将所有记录保存到目标文件中,<em>除了</em>:修改IHDR以获得最终图像大小并跳过IEND记录。在</p>
<p>在所有后续的迭代中:扫描PNG数据并只选择IDAT记录,将其写入输出文件。</p></li>
<li><p>向目标文件追加IEND记录。</p></li>
</ul>
<p>全部完成-你现在应该有一个有效的巨大的巴布亚新几内亚。不过,我不知道谁或什么人能读懂这句话。在</p>