旋转图像而不将整个图像保存在内存中
Rotate images without saving the whole image in memory
我正在使用 PNGJ 库保存一个大的 PNG 文件 (40000 x 3000)。现在我需要将图像向右旋转 90 度而不将整个图像保存在内存中。 PNGJ 库仅限于逐行写入图像,因此我无法旋转每一行并逐列写入图像。
有什么办法吗?
PNGJ library is limited to write images line by line
实际上,PNG格式是面向行的。如果不读取所有 "previous" 像素,就无法读取 PNG 图像的单个像素。所以,我猜你运气不好。
我认为,如果您不能将完整图像存储在内存中,您能做的最好的事情就是通过 K
水平条纹加载和写入它。你通过读取完整图像来填充第一个条纹(你只存储每行的第一个像素,对应于旋转图像的第一个水平条纹的像素,丢弃其余部分),写入它,然后再次读取文件到填充并写入第二个条纹,等等。
这涉及到对原文件的K
次读取(当然,你应该在内存允许的范围内把条纹弄得尽可能粗,这样才能使K
变小)。我希望你明白了。
您可以使用 PNGJ 做到这一点。
我正在使用 PNGJ 库保存一个大的 PNG 文件 (40000 x 3000)。现在我需要将图像向右旋转 90 度而不将整个图像保存在内存中。 PNGJ 库仅限于逐行写入图像,因此我无法旋转每一行并逐列写入图像。
有什么办法吗?
PNGJ library is limited to write images line by line
实际上,PNG格式是面向行的。如果不读取所有 "previous" 像素,就无法读取 PNG 图像的单个像素。所以,我猜你运气不好。
我认为,如果您不能将完整图像存储在内存中,您能做的最好的事情就是通过 K
水平条纹加载和写入它。你通过读取完整图像来填充第一个条纹(你只存储每行的第一个像素,对应于旋转图像的第一个水平条纹的像素,丢弃其余部分),写入它,然后再次读取文件到填充并写入第二个条纹,等等。
这涉及到对原文件的K
次读取(当然,你应该在内存允许的范围内把条纹弄得尽可能粗,这样才能使K
变小)。我希望你明白了。
您可以使用 PNGJ 做到这一点。