如何使用curl获取图像?

时间:2014-03-05 03:10:02

标签: c++ curl libcurl

我无法使用curl从网址获取图片。如果我将URL作为ImageMagick Image对象的构造函数传递,它就可以工作。但是使用curl我没有太多运气,我需要使用curl。

现在我正在......

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 个答案:

答案 0 :(得分:0)

在下载过程中,可以多次调用CURLOPT_WRITEFUNCTION(在您的情况下为curlCallback)设置的函数(请参阅文档)。

使用CURLOPT_WRITEDATA传递FILE*可能会更容易。