|
개별 포맷을 만들어 사용하시는 것이 좋으실것 같습니다. 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와 비슷하게 많이라도) 방법이나,
: 알고리즘이 있으면 좀 가르쳐 주세요.
:
: 즐프 하세요...
|