我正在编写一个java包装器convert
(这是image magick的一部分)。我想要做的是调用一个命令,convert -thumbnail 1024 test.JPG >(cat)
使其将缩略图字节流打印到标准输出。之后我想从这个流中读取并将其存储在 Blob 存储中。我在使用上面的命令时遇到困难,因为它看起来无法处理二进制数据。打印字节后,它还会打印类似的内容62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c62;c
。
我想避免写入临时文件,因为我不想处理任何目录权限。
我的命令做错了什么?是cat
无法处理二进制数据还是其他原因?
答案1
来自命令行处理的输出文件名部分网页:
标准输出
Unix 允许一个命令的输出通过管道传输到另一个命令。 ImageMagick 允许将一个命令通过管道传输到另一个文件名为 - 的命令。
在此示例中,我们将 Convert 的输出通过管道传输到显示程序:
magick logo: gif:- | display gif:-
然后你的命令行可以这样开始:
convert -thumbnail 1024 test.JPG -
...或选择转换为具有正确前缀的其他格式:
convert -thumbnail 1024 test.JPG png:-
...此时您可以将该输出传送到您的 blob-store-reader:
convert -thumbnail 1024 test.JPG - | blob-store-reader
答案2
cat
是为行和文本而设计的,但它不关心是否处理除一些控制字符之外的二进制数据。这是终端(您的普通标准输出)无法处理二进制数据并且可能会被卡住。
顺便说一句,对所需的输出文件使用“进程替换”就像走风景路线一样。并且,您应该正确使用它,添加另一个>
用于重定向。但是,到底为什么呢?man convert
:
对于标准输入或输出,将“文件”指定为“-”。