在c++中使用curl从url下载图像
Download an image from an url using curl in c++
我正在做一个项目,第一步包括从url下载图像并将其保存在某个位置。稍后将对该图像进行进一步处理。为此,我在visualstudio中使用了curl库和opencv。我是使用curl库的新手。我在这里看到了答案。但是,我不能理解。这是我的代码
#include <stdio.h>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include <string>
size_t write_data(void* ptr, size_t size, size_t nmemb, FILE* stream)
{
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(void)
{
CURL* curl;
FILE* fp;
CURLcode res;
char* url = "http://pimg.tradeindia.com/01063301/b/1/CRO-Oscilloscope.jpg";
char outfilename[FILENAME_MAX] = "C:\bbb.jpg";
curl = curl_easy_init();
if (curl)
{
fp = fopen(outfilename, "wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
fclose(fp);
}
return 0;
}
谢谢你的帮助。
#include <stdio.h>
#include <curl/curl.h>
size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
FILE* stream = (FILE*)userdata;
if (!stream)
{
printf("!!! No streamn");
return 0;
}
size_t written = fwrite((FILE*)ptr, size, nmemb, stream);
return written;
}
bool download_jpeg(char* url)
{
FILE* fp = fopen("out.jpg", "wb");
if (!fp)
{
printf("!!! Failed to create file on the diskn");
return false;
}
CURL* curlCtx = curl_easy_init();
curl_easy_setopt(curlCtx, CURLOPT_URL, url);
curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);
CURLcode rc = curl_easy_perform(curlCtx);
if (rc)
{
printf("!!! Failed to download: %sn", url);
return false;
}
long res_code = 0;
curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);
if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK))
{
printf("!!! Response code: %dn", res_code);
return false;
}
curl_easy_cleanup(curlCtx);
fclose(fp);
return true;
}
int main(int argc, char** argv)
{
if (argc < 2)
{
printf("Usage: %s <url>n", argv[0]);
return -1;
}
if (!download_jpeg(argv[1]))
{
printf("!! Failed to download file: %sn", argv[1]);
return -1;
}
return 0;
}
这个怎么样??
我不理解argc和argv方面的代码。你能不用它们解释吗约翰·史密斯
它们用于在启动程序时传递命令行参数。argv是指向cstrings数组的双指针,argc是cstrings的数量。在这种情况下,argv[0]将是可执行文件的名称,argv[1]将是要下载的映像的URL。即foo.exe http://path/to/image.jpg
相关文章:
- 如何使用url确定网站协议
- 下载URL中的所有文件
- 使用libcurl提交批量url的正确BING Api POST url是什么
- VisualStudio:使用 Suse Enterprise Server 12 SP5 时,不会下载远程库标头
- 将所有 URL 组织在类中的一个位置
- 从 C++ 上的网址下载文件
- libcurl :显示正在运行的上传和下载速率
- 从 C++ 中的 URL 获取结果
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- 在加载 MSHTML 文档之前从 MSHTML 文档中删除无效的 URL
- 连接到 URL Sqlite 数据库C++
- 从Web URL下载内容
- 无法从QT 4.8中的URL存储下载的文件
- 如何在http代理后面下载带有ftp url的文件
- 在c++中使用curl从url下载图像
- Curl-通过登录从间接URL下载文件
- 如何在 Linux 中使用C++下载受密码保护的 URL
- 用C++将文件从URL下载到磁盘
- 让网页使用特定的URL来下载HTML资源
- c++ /CLI - URL下载到文件