0

我正在使用 Windows libvipsCLI 将图像从格式转换HEICPNG格式。我想将转换后的输出通过管道传输到另一个进程而不写入磁盘。这可以通过写入stdout(即仅键入文件扩展名作为输出文件)来实现:

vips copy input.heic .png

但是,如果我改为写入文件:

vips copy input.heic output.png

并将stdout字节流与 的内容进行比较output.png,它们有些不同。实际上,写入stdout文件会导致 PNG 损坏。

stdout进一步的分析使我意识到和之间的区别在于文件中不存在output.png大量随机放置的CR字符。stdout其他一切都是一样的。

有没有办法在stdout读取时获得正确的字节流output.png

4

1 回答 1

0

看起来你遇到了一个错误 --- Windows 在文本模式下创建标准输入和标准输出,所以当 libvips 写入标准输出时,任何换行符都会自动扩展为换行符 + 回车符。

在 win 上运行时,libvips 可能需要_setmode(1, O_BINARY);在写入图像数据之前调用强制二进制模式。我已经向 libvips 8.10 推送了一个补丁并感谢您。此修复将在 8.10.3 中发布,一两周后到期。

于 2020-11-26T10:35:54.063 回答