2010-03-08 2 views
1

제목은 충분히 생각합니다. 나는 완전한 품질의 BufferedImage를 가지고 있으며, 비트율이 낮은 비트를 가진 OutputStream을 통해 전송하려고합니다. 알고리즘이 픽셀별로 픽셀을 변경하는 것을 원하지 않기 때문에 여전히 완전한 품질입니다.자바 : 낮은 비트 깊이의 소켓을 통해 BufferedImage를 보내십시오.

그래서, 목표는 기입하는 바이트의 아주 작은 수를 걸리는 OuputStream을 통해 (전체 해상도, 전체 크기) 이미지를 작성하는 것입니다.

http://java.sun.com/developer/technicalArticles/Programming/compression/

이 비록 JPEG 및 PNG 이미 어떻게 든 Inflater 클래스를 사용하여, 압축

, 당신은 할 수 있습니다

감사합니다,
마티

+1

보내지는 실제 바이트 스트림을 최소화 하시겠습니까? 그렇다면 자바에서 많은 이미지 인코더를 사용하여 이미지를 압축 된 매우 많은 이미지 형식 중 하나로 인코딩해야한다고 생각합니다. (PNG - 무손실), JPG (손실). –

+1

"bitdepth"는 픽셀 당 비트 수입니다. 품질을 바꾸고 싶지는 않지만 "비트 깊이"는 무엇입니까? – Pindatjuh

답변

1

이미지 데이터를 이미지에 적합한 특성으로 인코딩해야합니다. 이 24 비트 컬러의 색상을 많이 가지고 있으며, 더 품질을 잃지하려는 경우, 당신은 아마 PNG와 함께 붙어 있지만, 일부 품질을 잃을 수 있다면,

을 시도 무손실 JPEG 2000

을 조사하고 있습니다

  1. 손실 JPEG 2000 - 색상 수를 줄이고 색상 매핑 형식

이미지는 회색 또는 검은 색과 흰색의 데이터가있는 경우를 사용하여 동일한 품질 손실

  • 에 대한 JPEG보다 훨씬 작게 만들 그걸 8 비트 그레이 또는 1 비트 블래크로 인코딩하고 있는지 확인하십시오. k와 흰색). 그런 다음 해당 종류의 형식 (예 : 그룹 4 또는 JBIG2의 TIFF)으로 조정 된 인코더를 사용해야합니다.

    또 다른 좋은 옵션은 이미지에서 원치 않는 메타 데이터를 모두 제거 (또는 인코더 어떤에 넣어하지 않도록)하는 것입니다.

    자바의 내용을 고수하려면 TIFF, PNG 또는 JPEG를 사용해야합니다. 제 3 자 이미지 엔드 코더가 있습니다 (예 : 회사, Atalasoft). 이러한 고급 인코더의 .NET 버전을 만듭니다. 비트 깊이를 줄이는 것이 보통 감소) 의미가하지 않는 (품질을 줄이는 의미 : -

    는 참고)뿐만 아니라 거기에 자바 벤더가 있습니다. 예를 들어 24 비트 컬러 이미지가 있지만 모든 색상이 회색 (R == G == B 인 경우) 인 경우 8 비트 회색으로 줄이면 품질이 떨어지지 않습니다. 이미지에 256 가지 색상의 콜렉션이 있고 색상 맵핑 (색인 또는 팔레트) 형식으로 전환하는 경우에도 마찬가지입니다. 바이트 수를 줄이고 품질을 저하시키지 않습니다.

  • 1

    압축에 대한 모든에 대한 java.util.zip 패키지에서보세요 이미지의 품질을 정확히 유지하면서 바이트 수를 줄이십시오. 이미 압축 된 형식을 압축하는 것은 일반적으로 중요하지 않습니다. 그러나 몇 개의 이미지를 그룹화하면 인플레이션 기법이 객체 데이터의 공통 패턴을 인식하므로 반복을 줄이고 바이트 수를 줄이므로 중요도를 높이는 것이 중요합니다.

    관련 문제