0

次のように、cURLによって返される動的にダウンロードされた画像を印刷しようとしています。

    char *raw_image = malloc(1024);

    raw_image = doCurl("GET", img_url, NULL, NULL);

    printf("Content-Type: image/png\n\n");

    fwrite(raw_image, sizeof(raw_image), 20000, stdout);

20000よりも小さいサイズを実行すると、画像がカットされます。その数を動的にするにはどうすればよいですか?ファイルに書き込みたくない-stdoutが最良のオプションです。

どんな助けでも大歓迎です。

4

3 に答える 3

1

[超小型言語に依存しないコメント:生のPNGデータをstdoutに書き込むのが最善であると確信していますか?]

また、libcurlその画像を取得するために使用しているようです。CURLハンドルにカスタムコールバック関数を設定しない場合は、stdoutに直接書き込みます。

ただし、これが意図したことではない場合は、を確認することをお勧めしますrealloc()

于 2013-01-18T19:09:46.733 に答える
1

理想的には、ダウンロードしているファイル(画像)のサイズを知る方法が必要です。

libcurlを使用して最初にヘッダーをフェッチし、サイズを取得します。

サイズをsで保存するとします

あなたがバッファを割り当てるとき、あなたはすべきです

char *raw_image = malloc(s);

sはデータのサイズであるため、 1024バイトではなく保持する必要があります。

ファイルをダウンロードしてraw_imageに保存します

それで

fwrite(raw_image, 1, s, stdout);

sizeof(raw_image)はバッファーへのポインターのサイズであるため、64ビットhwアーキテクチャーでは8バイトであることに注意してください。ファイルのサイズではありません!

-

だが....

-

あなたは画像をフェッチしていて、それをstdoutでストレミングしています。

簡単なカールの呼び出しをしてみませんか?

于 2013-01-18T19:10:11.093 に答える
0

ポインタのサイズの20000オブジェクトを書き込むようにfwriteに指示しています。これは、sizeof(raw_image)がraw_imageのサイズを返すためです。これはポインターであるため、ほとんどの32ビットマシンでは4バイト、ほとんどの64ビットマシンでは8バイトです。raw_imageが指すバッファのサイズは返されません。

ダウンロードする画像のサイズを決定する方法はわかりませんが、何らかの方法でそのサイズを決定する必要があります。これを行うと、fwrite呼び出しは次のようになります。

fwrite(raw_image, 1, sizeOfTheImageInBytes, stdout)
于 2013-01-18T19:10:43.497 に答える