2011-01-10 3 views
2

이미지를 반환하는 webservice가 있으면 가장 간단한 경우에는 추가 문자열 또는 숫자로 구조화 된 데이터를 반환하는 표준 방법이 있습니까?이미지에 더하기 숫자를 반환하는 웹 서비스

이미지를 반환하는 webservice의 PHP 예제는 this question을 참조하십시오. 는 (하지만 내 질문은 이제 PHP 특정하지 않습니다.)

가능한 솔루션 (대부분 매우 만족하지 않음) :

  1. 이미지의 메타 데이터에 추가 데이터를 넣습니다.
  2. HTTP 헤더에 여분의 데이터를 넣습니다.
  3. 웹 서비스에서 한정된 시간 동안 이미지를 가져올 수있는 nonce URL을 반환하도록하십시오.
  4. 이미지를 Base64- 인코딩하여 JSON 또는 XML 데이터 구조에서 거대한 문자열 필드로 만듭니다. (CarlesTiago 덕분에)

어떻게 하시겠습니까?

합니다 (웹 서비스 매개 변수의 톤을 취하고 그 두 번 모두를 보낼 낭비 것 때문에 내가 정말 두 개의 별도의 전화로 웹 서비스를 분리하고 싶지 않아요.)

답변

2

HTTP 헤더는 서버 측과 클라이언트 측에서 쉽게 파싱 할 수 있으므로 실행 가능한 선택입니다 .

  1. 가 '그건 http://mysite.com/bestimageever.png
  2. 얻을 302-http://mysite.com/realbestimage.png?supercoolinfo=42

히트> - 당신이 할 수있는 또 다른 것은 설치 URL의 이미지와 데이터로 URL로 리디렉션 (302) (예 : 사용자에게 투명하고 대부분의 API 클라이언트가 작동합니다 (리디렉션을 처리하기 때문에)

+0

David! HTTP 헤더를 사용하는 것은 다소 비표준적인 것 같지만, 아마도 그걸로 갈 것입니다. 302 URL 리디렉션 아이디어가 마음에 들지 않습니다. 원본 URL은 자체 매개 변수를 사용하여 이미지를 생성해야하므로 이미지가 다소 엉망이됩니다. – dreeves

+0

+1 나는이 접근법을 좋아합니다! 어쨌든 2 개의 요청을 의미합니다. base64 인코딩의 오버 헤드가 너무 크면 좋습니다. –

0

입니다하지 가능 포함하는 반환 json/xml 안에 이미지를 형성하는 바이너리 데이터? 이렇게하면 필요한만큼 필드를 추가 할 수 있고 클라이언트에서이 정보를 처리 할 수 ​​있습니다.

+0

정말 가능할까요? 예를 들어 텍스트 만 JSON이 아닌가요? 거대한 문자열로 이미지를 인코딩 한 다음 JSON 객체의 필드 중 하나 일 수 있다고 가정합니다. 이게 네가 말하는거야? – dreeves

+0

예. 서버 제한 사항을 웹 서버에서 생성 된 출력 크기로 확인하면됩니다.응용 프로그램이 웹 서버의 출력을 처리하여 이미지에서 변환하는 것을 이해했습니다. –

2

복귀 화상의 base64로 인코딩 이진 데이터와 추가 필드 :

{ image: "mIIerhdkwje...", data: "data" } 

Base64 인코딩하면 33 %의 오버 헤드를 제공은 (각 3 원 바이트 4 바이트 필요). 데이터의 크기에 따라이 값을 이진 데이터의 URL로 바꾸고 두 번째 요청을 발행하는 것이 더 좋습니다.

+0

쿨, 고마워. 나는 이것이 티아고가 그의 대답에서도 의미했던 것 같다. 따라서 이것이 최선의 방법이라고 확신하십니까? – dreeves

+0

더 잘 알지 못하기 때문에 제가 사용하게 될 것입니다.) –

1

프로토콜 버퍼는 XML 또는 JSON과 같이 자체 설명이 아니지만 훨씬 더 복잡합니다. Google 도서관 (ht tp : //code.google.com/p/protobuf)는 C++, Java 및 Python 라이브러리를 제공하며 기여자는 다른 많은 언어에 대한 라이브러리를 제공합니다 (http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns), Javascript와 PHP를 포함하여 클라이언트 작성자는이 형식으로 작업하기 쉽도록해야합니다.

관련 문제