2014-03-05 92 views
0

我無法使用curl從URL獲取圖像。如果我將URL作爲ImageMagick Image對象的構造函數傳遞,它將起作用。但使用捲曲我沒有太多的運氣,我需要使用捲曲。如何使用捲曲獲取圖像?

現在我在做......

curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curlCallback); 
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 
curl_easy_perform(curl); 

然後

size_t curlCallback(char* buf, size_t size, size_t nmemb, void* up) 
{                 
    ofstream out; 
    out.open("/home/name/Desktop/img.png"); 
    out.write(buf, nmemb * size); 

    return size * nmemb; 
} 

它似乎得到一個PNG的開始,而不是整個事情。它只返回251個字節(標題信息或東西可能??)。圖像查看器將以png的形式打開並瞭解其分辨率,但圖像本身是空白的。如果我將緩衝區打印到控制檯,我會看到PNG和二進制數據符號。

我知道它不是與遠程主機的一個問題,因爲如果我使用ImageMagick的:

Image image = Image(url); 

然後我得到了它的整體形象,可以保存它,它就好了。

+1

'curlCallback'可以在下載過程中多次調用(請參閱文檔[http://curl.haxx.se/libcurl/c/curl_easy_setopt.html])。使用傳遞FILE *的'CURLOPT_WRITEDATA'可能會更容易。 –

+0

好的電話,擁有這些新知識,我已經打敗了這個問題。如果你想寫這個答案,我會選擇它作爲解決方案。 – Aurast

+0

添加它作爲評論,因爲我沒有工具來嘗試提出的解決方案,很高興你知道了。 –

回答

0

在下載過程中可以多次調用CURLOPT_WRITEFUNCTION(您的情況爲curlCallback)所設置的功能(請參閱文檔)。

使用CURLOPT_WRITEDATA通過FILE*可能會更容易。