java - 旋转图像而不将整个图像保存在内存中

标签 java image image-processing png bufferedimage

我正在使用 PNGJ 保存一个大的 PNG 文件 (40000 x 3000)图书馆。现在我需要将图像向右旋转 90 度而不将整个图像保存在内存中。 PNGJ 库仅限于逐行写入图像,因此我无法旋转每一行并逐列写入图像。

有什么办法吗?

最佳答案

PNGJ library is limited to write images line by line

实际上,它是面向行的 PNG 格式。如果不读取所有“先前”像素,就无法读取 PNG 图像的单个像素。所以,我猜你运气不好。

我认为,如果您不能将完整图像存储在内存中,您能做的最好的事情就是通过 K 水平条纹加载和写入它。你通过读取完整图像来填充第一个条纹(你只存储每行的第一个像素,对应于旋转图像的第一个水平条纹的像素,丢弃其余部分),写入它,然后再次读取文件到填充并写入第二个条纹,等等。 这涉及对原始文件的K 次读取(当然,你应该在内存允许的范围内将条纹做得尽可能粗,以便使K 变小)。我希望你明白这一点。

您可以使用 PNGJ 做到这一点。

关于java - 旋转图像而不将整个图像保存在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43618181/

相关文章:

css - 拉伸(stretch)时如何计算图像内对象的x和y?

java - 你能帮助理解如何使用 JOIN 与 spring-repository 吗?

javascript - 悬停价格标签时的图像映射

android - 使用 Aquery 在 sdcar 中存储图像 - Android

opencv - 寻找单应性 v/s 轮廓检测

python - 如何使用外部 USB 摄像头数据正确格式化 PIL.Image.frombytes

java - Spring Property Placeholder 读取的属性是否立即可用?

java - 如何使用java api从云存储获取多个文件进行大查询

java - Springboot Controller 问题

php - 如何在图片下方添加说明?