私はJavaラッパーconvert
(画像マジックの一部)を書いています。私がしたいのは、convert -thumbnail 1024 test.JPG >(cat)
サムネイルバイトストリームを標準出力に出力するようにコマンドを呼び出すことです。後でこのストリームから読み込み、Blob Storageに保存しようとしています。上記のコマンドはバイナリデータを処理できないようで、使用に問題があります。バイトを印刷した後、次の内容も印刷します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
~からコマンドライン処理の出力ファイル名部分Webページ:
標準出力
Unixでは、あるコマンドの出力を別のコマンドにパイプできます。 ImageMagickを使用すると、1つのコマンドをファイル名を持つ別のコマンドにパイプできます。
この例では、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
:
標準入力または出力の場合は、「file」を「-」で指定します。