C# .net에서 JPEG 이미지를 직렬화합니다. 나는 단순히 바이트 스팀으로 변환하고 웹 서비스를 통해 전송한다. 직렬화 된 바이트 스트림이 실제 이미지 크기의 30 배 이상인 것을 관찰했습니다. 어느 누구도 실제 이미지의 크기에 비례하여 직렬화 및 유지하는 더 나은 방법을 제안 할 수 있습니까?이미지를 더 간단하게 직렬화 할 수 있습니까?
답변
면책 조항 : 어쩌면 당신은 데이터 패킷 프로토콜 오버 헤드 바이트를 많이 추가 SOAP 같은 것을 사용하고
그것의 개방/표준과 성능 간의 트레이드 오프 .. 말하기 비 통보 사람입니다. 크기가 중요한 제약이라면 순수한 바이너리 스트림으로 전송 해보십시오. 실제 구문은 다른 사람이 입력 할 수도 있습니다.
JPEG는 압축 기술이며, 그것을 읽으십시오. 이것이 파일 형식의 본질입니다. 먼저 이미지로 읽지 않고 원본 JPEG 파일을 보내는 방법을 찾으십시오.
왜 "크게 읽으면 크게 확장할까요?" – Indy9000
@Indeera, JPEG 파일을 이미지로 읽으면 메모리에서 압축되지 않습니다. 예를 들어 Windows 샘플 이미지 Tulips.jpg는 디스크의 경우 620K이고 메모리의 경우 2359K입니다. JPEG를 만들 때 적용된 압축 매개 변수와 압축되지 않은 이미지에 알파 채널이 있는지 여부에 따라 그 차이가 훨씬 커질 수 있습니다. 그것은 결국 압축의 전체 지점입니다. –
- FileStream을 사용하여 원본 이미지 스트림을 읽고 MemoryStream을 사용하여 직렬화기를 전달해야합니다.
- 이미지 클래스 만 사용할 수있는 경우 수신중인 바이트 배열의 출력 형식을 지정하십시오.
webservices에서 보내는 이미지의 크기가 클 경우 MTOM을 살펴볼 수 있습니다. 이진 첨부 파일을 사용하여 메시지 크기를 최적화하는 WS- * 표준입니다. 그것은 지금 매우 자바 또는 .NET에서 Axis2를 나 지하철 같은 스택에 통합되어 :
http://msdn.microsoft.com/en-us/library/aa528822.aspx http://msdn.microsoft.com/en-us/library/ms733742.aspx (WCF)이
왜 그것이 Base64String로 변환?
다른 쪽 끝에서byte[] arr = File.ReadAllBytes(filename);
string str = Convert.ToBase64String(arr);
당신은 이동하여 다시 바이트 []로 변경할 수 있습니다 :
byte[] arr = Convert.FromBase64String(string);
다른 인코딩 레이어를 추가하면 크기가 커질 수 있습니다. –
어쩌면 단지 웹 서버에서 이미지를 호스팅하고 오히려 웹 서비스 응답의 URL을 보낼 직렬화 된 이미지보다. 또한 클라이언트가 가능할 때 로컬로 이미지를 캐시 할 수 있습니다.
바이 스트림이 어떻게 30 배 더 커 졌는지 관찰 했습니까? –