2014-03-05 1 views
0

컬을 사용하여 URL에서 이미지를 가져 오는 데 문제가 있습니다. ImageMagick Image 객체의 생성자로 URL을 전달하면 작동합니다. 그러나 곱슬 곱슬을 사용하면 나는 운이별로 없으며 곱슬 곱슬을 사용해야합니다.컬을 사용하여 이미지를 얻는 방법?

지금 내가 뭘

...

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와 이진 데이터 기호가 표시됩니다.

Image image = Image(url); 

은 그 때 나는 전체의 이미지를 얻을하고 저장할 수 있으며 잘입니다 : 내가 ImageMagick를 사용하는 경우 때문에

나는 원격 호스트와의 문제가되지 않습니다 알고있다.

+1

'curlCallback'은 다운로드 중에 여러 번 호출 할 수 있습니다 (docs [http://curl.haxx.se/libcurl/c/curl_easy_setopt.html] 참조). FILE *로 전달되는'CURLOPT_WRITEDATA'를 사용하는 것이 더 쉬울 수도 있습니다. –

+0

좋은 지식,이 새로운 지식으로 무장 한 나는이 문제를 물리 쳤다. 이 질문을 답으로 쓰고 싶다면 해결책으로 선택하겠습니다. – Aurast

+0

제안 된 솔루션을 사용해 볼 도구가 없기 때문에 주석으로 추가했습니다. 기쁜 마음으로 알아 냈습니다. –

답변

0

CURLOPT_WRITEFUNCTION (귀하의 경우 curlCallback)으로 설정된 기능은 다운로드 중에 여러 번 호출 할 수 있습니다 (문서 참조).

CURLOPT_WRITEDATA을 사용하면 FILE*에 쉽게 입력 할 수 있습니다.