Silverlight/Workshop

Deep Zoom Composer Online (PHP 버전) 제작기

길버트리 2008. 7. 27. 17:04

ScreenShot

사용자 삽입 이미지

사용자 삽입 이미지


Intro

서버호스팅 환경이 아닌, '웹호스팅 환경에서도 [딥줌 컴포저] 기능을 사용할 수 있게 하면 어떨까?'

하는 생각에서 PHP로 딥줌 컴포저를 만들기 시작하였습니다.

일단 목표기능은 Composition 타입의 딥줌 데이터를 생성하는 것!

다행히 그동안 DeepView Lite 등을 개발하면서 Deep Zoom Data Structure는
어느 정도 빠삭하게 알고 있어서 컴포징하는 Core 부분 구현은 그렇게 시간이 오래 걸리지 않았습니다.

200라인짜리 PHP프로그램이 완성되는데, 3시간 정도 걸린 것 같습니다.
오히려 라이브 데모 사이트 꾸미는데 시간이 더 걸렸네요. ^^;;


Live Demo

아래 링크를 방문하셔서
딥줌 사진 구경도 하시고, 사진올리기도 해 보십시오.
아참! 잊지마시고 전체화면 기능도 사용해 보십시오.
(대형 와이드 모니터에서 보면 간지가...^^)

http://hugeflow.com/DZCPHP/

주의!
현재 삭제 기능은 관리자에게만 있으므로, 잘못 올린 사진은 직접 지우실 수가 없습니다.
'위험한' 사진은 절대 올리지 마세요. 무슨 말씀인지 알겠죠????


Issue

작업을 하다 보니 앞으로 넘어야 할 산들이 좀 있습니다.

1. 업로드 용량제한

세들어 사는 웹호스팅 환경이다 보니, 보통 10MB 정도의 Upload 제한이 있습니다.
각자의 서버에서는 phpinfo를 수행하면 PHP Core파트의 upload_max_filesize 변수로 확인하실 수 있습니다.

사용자 삽입 이미지

컴포저의 작동 한계에 도달하기 전에 업로드 용량제한에 먼저 부딪힙니다.
그래도 디카가 찍어내는 이미지들을 대상으로 해서 사용하기에는 부족함이 없어 보입니다.


2. 축소 알고리즘이 열악함

단계별 축소 이미지를 만들어 내기 위해
imagecopyresampled, imagecopyresize 따위의 함수를 사용하게 되는데,
이때 축소된 이미지에 만족할 수 없었습니다.

Microsoft Deep Zoom Composer PHP Deep Zoom Composer
8/0_0.jpg
사용자 삽입 이미지
사용자 삽입 이미지
11/3_2.jpg
사용자 삽입 이미지
사용자 삽입 이미지
12/8_4.jpg
사용자 삽입 이미지
사용자 삽입 이미지
각 Composer에 의한 축소 이미지 비교

맨 마지막의 12/8_4.jpg 파일은 원본 사이즈를 축소 과정 없이 타일링한 파일로서,
퀄리티 차이나 느낌차이가 크게 나지 않습니다.

나머지 축소 과정을 거친 파일들은 Microsoft의 것은 Blur를 준 느낌이 나는 반면,
PHP에 의한 것은 Sharpen을 과도하게 먹인 느낌이 나는군요.

두 output 모두 맘에는 딱 안들지만 PHP 쪽의 결과물이 더 눈에 거슬립니다.
(DeepView Lite로 볼 때 느낌이 그렇습니다.)

개선할 방법이 있는지 생각해 봐야겠습니다.


3. Speed

컴포징 속도는 개인 PC와 웹호스팅 환경에 따라 느낌의 차이가 많이 나실 겁니다.
컴포징 전에 업로드하는 시간도 존재하구요.
일단 Live Demo 사이트에서는 업로드 시간과 컴포징 소요 시간을 분리한 뒤,
컴포징 소요 시간을 저장해 놓았으므로 열람하실 수 있습니다.

Composition Type의 Deep Zoom Data를 얻는데 있어서는
제 노트북에서 Microsoft Deep Zoom Composer를 통하는 것보다
빠르게 작업할 수 있다고 느꼈습니다.

무엇보다 그 과정의 간결함이 크게 작용하였습니다.
사진만 선택해서 업로드 하면, DeepView Lite로 바로 볼 수 있고,
바로 퍼가기도 가능하다는 것 말이죠.


Epilogue

브로드밴드 서비스를 위해서는 Deep Zoom 컴포징 서버가 따로 존재해야 하겠지만,
개인적으로 가볍게 사용할 목적으로는 Deep Zoom은 그렇게 멀기만 한 기술이 아닙니다.
(서버 버전의 컴포저는 이과장님이 전문이십니다.)

위 시도를 통해서, 제로보드, 태터툴즈(or 텍스트 큐브) 등 PHP 기반의 프로그램에서도
손쉽게 Deep Zoom 컴포징 & View 기능을 내장할 수 있다는 가능성을 확인하였습니다.

PHP는 제가 오래 사용해 왔던 언어라서 이번 실험에 사용했습니다만,
Image Handling이 가능한 수많은 서버 언어에서도 비슷한 시도가 가능하겠습니다.

감사합니다.