2012-04-13 3 views
4

현재 C 언어로 된 jpeglib-turbo 라이브러리를 사용하여 jpeg 리사이 저를 구현하고 있습니다.고성능 jpeglib-turbo implmentation이 100ms 미만으로 압축/압축 할 수 있습니까?

라이브러리를 사용하여 JPEG 압축 풀기 및 재 압축을위한 대상이 100 밀리 초입니다. 내가 권장하는 최적화 설정 (jpeglib-turbo usage.txt에 설명되어 있음)을 사용할 때 가장 좋은 점은 320ms 정도이므로 가능한/현실적인 100ms가 궁금합니다. 이것은 약 6Mb에서 130Kb로 3000x4000 px의 이미지를 압축 해제/재 압축하는 것입니다.

나는 빠른 압축 해제를 위해 사용하고 코드는 다음과 같습니다 답변에 대한

dinfo.dct_method = JDCT_IFAST; 
    dinfo.do_fancy_upsampling = FALSE; 
    dinfo.two_pass_quantize = FALSE; 
    dinfo.dither_mode = JDITHER_ORDERED; 
    dinfo.scale_num = 1/8; 
+0

호기심 때문에 왜 그렇게 빨리해야합니까? 6MB JPEG의 경우 320ms가 매우 빠릅니다. – Bojangles

+1

플랫폼을 언급하지 않았습니다. 모바일 용입니까? 데스크톱? 단일 또는 다중 스레드? 내가 작업 한 빠른 "축소판 그림 미리보기"코드가 있습니다. 내 2GHz Core i7 (단일 스레드 사용)에서 120 메가 바이트 정도의 6 메가 바이트 JPEG 데이터 (4000x4000 이미지)에서 1/8 크기의 RGB32 이미지를 추출 할 수 있습니다. 500x500 이미지를 130KB로 재 압축하려면 또 다른 40-100ms가 걸릴 것입니다. (아직 압축기에 대해 극단적 인 최적화를 수행하지 않았습니다). 축소판 추출 코드의 시간이 중요한 부분은 64 비트 어셈블리 언어로 작성됩니다. 자세한 정보를 원하시면 저에게 연락하십시오 ([email protected]). – BitBank

+2

언제든지이 프로젝트 오픈 소스입니까? 링크를 게시하십시오 :) – kritzikratzi

답변

4

감사합니다.

실제로 약 100ms 내에 압축을 풀고 다시 압축 할 수 있습니다. libjpeg-turbo의 작가에게 연락 한 후에 그는 내가 사용하고있는 dinfo.scale_num 속성이 잘못되었다고 말했다. 이 속성은 분자입니다. 또한 scale_denom (분모) 속성을 설정해야했습니다.

그래서 좋은 코드는 다음과 같습니다

dinfo.dct_method = JDCT_IFAST; 
dinfo.do_fancy_upsampling = FALSE; 
dinfo.two_pass_quantize = FALSE; 
dinfo.dither_mode = JDITHER_ORDERED; 
dinfo.scale_num = 1; 
dinfo.scale_denom = 8; 

내가 속도/사용자 경험이 어디에 코드가 너무 빨리가 클라이언트 응용 프로그램에있어 같은 이미지 스케일링이 사용자의 눈에 보이지해야합니다으로되고 싶어 가장 중요한 것.

+0

'scale_num'을 두 번 설정하고 있는데, 호출 중 하나가'scale_denom'을 대신 설정해야한다고 생각하십니까? –