|
유영인.Chris 님이 쓰신 글 :
: 개별 포맷을 만들어 사용하시는 것이 좋으실것 같습니다. BMP와 JPEG 의 로딩 속도 차이는 그 차이가 엄청납니다.
:
: 허프만식 방법으로 압축을 하는 알고리즘을 직접 만드셔서 BMP 데이터를 하나의 개별 포맷으로 만들어 내시는 것이 좋을 것 같습니다. 허프만식 알고리즘도, 압축 프로그램처럼 구현한다면 오히려 압축 해제 속도가 더 걸릴 수 있으니, 적당한 선에서 자르는 것도 좋으실 것 같습니다.
:
: 아니면 GIF, PNG 같은 차선책을 이용하시는 것도 어떠신지요. JPG 보다는 로딩 속도가 빠릅니다.
:
: 아래는 아바타를 만들어 볼때 쓰던 압축방법인데 간단한 압축만 하고 있습니다. BMP 특성상 간단한 압축을 해도 압축률이 상당히 좋습니다. 압축은 PHP, 해제는 C++ Builder 에서 하고 있습니다. PHP 소스 밖에 못찾아서 이것밖에 못 올려드리네요.. 꾸벅..
:
: <?
:
: // 자체 압축 알고리즘. 컬러 인덱스화는 PHP 인터프리터의 속도가 너무 나오지 않아 포기. --;
: // 현재는 반복 컬러 사용만을 키로 대치하는 루틴이다. 압축률은 약 30%.
: function Compress($SOURCE, $SOURCE_COUNT, $HEADER) {
:
: global $COMPRESSED_HEADER;
: global $COMPRESSED_IMAGE;
:
: $TREE = array("");
: $KEY_1BYTE = "";
: $KEY_2BYTE = "";
: $COMPRESSED_HEADER = $HEADER;
:
:
: // 각 ASCII의 사용 횟수를 알아봄
: for($itCount = 0; $itCount < $SOURCE_COUNT; $itCount ++) {
: $HEAD = substr($SOURCE[$itCount], 0, 1);
: $TAIL = substr($SOURCE[$itCount], 1, 1);
:
: $HEAD_INDEX = ord($HEAD);
: $TAIL_INDEX = ord($TAIL);
:
: $TREE[$HEAD_INDEX] ++;
: $TREE[$TAIL_INDEX] ++;
: }
:
:
: // 사용 할 수 있는 ASCII 코드를 따로 키로 뽑음
: for($itCount = 0; $itCount < 256; $itCount ++) {
: if($TREE[$itCount] == 0) {
: if($KEY_1BYTE == "") {
: $KEY_1BYTE = chr($itCount);
: } else {
: $KEY_2BYTE = chr($itCount);
: break;
: }
: }
: }
:
:
: // 모든 ASCII가 다 사용 될때의 처리. 압축 할 수 없음
: if($KEY_1BYTE == "") {
: return;
: } else {
: $COMPRESSED_HEADER = "JF" . $KEY_1BYTE . $KEY_2BYTE . substr($HEADER, 2, 256);
: }
:
:
: // 컬러를 압축
: $COLOR_PREVIOUS = "";
: $COLOR_COUNT = 0;
: $COLOR_STRING = "";
:
: for($itCount = 0; $itCount < $SOURCE_COUNT; $itCount ++) {
: if($COLOR_PREVIOUS == $SOURCE[$itCount]) {
: $COLOR_COUNT ++;
: } else {
: if($COLOR_COUNT > 1) {
: if($COLOR_COUNT <= 255) {
: $COLOR_STRING .= $KEY_1BYTE;
: $COLOR_STRING .= chr($COLOR_COUNT);
: } else {
: $COLOR_STRING .= $KEY_2BYTE;
: $COLOR_STRING .= chr($COLOR_COUNT % 256) . chr($COLOR_COUNT / 256);
: }
: }
:
: $COLOR_STRING .= $SOURCE[$itCount];
: $COLOR_PREVIOUS = $SOURCE[$itCount];
: $COLOR_COUNT = 1;
: }
: }
:
:
: // 남은 Count 처리
: if($COLOR_COUNT > 1) {
: if($COLOR_COUNT <= 255) {
: $COLOR_STRING .= $KEY_1BYTE;
: $COLOR_STRING .= chr($COLOR_COUNT);
: } else {
: $COLOR_STRING .= $KEY_2BYTE;
: $COLOR_STRING .= chr($COLOR_COUNT % 256) . chr($COLOR_COUNT / 256);
: }
: }
:
:
: $COMPRESSED_IMAGE = $COLOR_STRING;
:
: }
:
: ?>
:
:
: 머슴.한석복 님이 쓰신 글 :
: : BMP 나 JPEG으로 파일을 저장 할때요..
: :
: : JPEG이 BMP에 비해서 훨씬 저장 시간이 많이 걸리 잖아요...
: : -제가 테스트 해 본 결과로는 약 2-300 MS가 더 걸리던데...
: :
: : JPEG으로 저장 할때, 시간을 좀 줄이는(BMP와 비슷하게 많이라도) 방법이나,
: : 알고리즘이 있으면 좀 가르쳐 주세요.
: :
: : 즐프 하세요...
성의 있는 답변 정말 고개 숙여 감사 드립니다.
좋은 하루 되십시오.
|