광고 플랫폼이나 기타등등을 만들다 보면 배너 용량에 대해서 신경을 쓸 수 밖에 없다.
그렇다고 해서 광고주에게 "PNG 타입을 용량을 줄여 주세요" 라고 하면 색상을 빼던지 단순화 시켜서 가져오며 불평을 늘어 놓게 된다.
그럼 어떻게 하면 좋을까를 찾아보다가 원래는 https://tinypng.com/ 을 이용하세요 하곤 한다.
그런데, 잘 구글링 해보면 분명 찾을 수 있을 것만 같아서 찾아보니...
두둥, 있다..
pngquant 라는 놈이 있었다.
압축하면 약 70% 정도 작아지고 투명배경도 지원한다.
어떻게 하면 될까 라는 생각에 무작정 해 보았다.
설치 방법은 너무도 심플했다.
서버를 KT 유클라우드로 이용하고 있고, CentOS5를 이용하고 있으니 yum을 이용하면된다. 그도 아니라면 RPM을 이용하면 되고, 것도 아니라면 소스 컴파일 하면 된다.
난, 게으름뱅이 이므로 yum을 이용한다.
server>yum install pngquant
이게 끝이다. 그러면 딱 설치가 된다.
이것은 command 방식이므로 PHP에 연동해야 해서 살짝 찾아보았더니, https://pngquant.org/php.html 메뉴얼이 뜬다.
일단 간단히 Function을 보면
/** * Optimizes PNG file with pngquant 1.8 or later (reduces file size of 24-bit/32-bit PNG images). * * You need to install pngquant 1.8 on the server (ancient version 1.0 won't work). * There's package for Debian/Ubuntu and RPM for other distributions on http://pngquant.org * * @param $path_to_png_file string - path to any PNG file, e.g. $_FILE['file']['tmp_name'] * @param $max_quality int - conversion quality, useful values from 60 to 100 (smaller number = smaller file) * @return string - content of PNG file after conversion */ function compress_png($path_to_png_file, $max_quality = 90) { if (!file_exists($path_to_png_file)) { throw new Exception("File does not exist: $path_to_png_file"); } // guarantee that quality won't be worse than that. $min_quality = 60; // '-' makes it use stdout, required to save to $compressed_png_content variable // '<' makes it read from the given file path // escapeshellarg() makes this safe to use with any path $compressed_png_content = shell_exec("pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg( $path_to_png_file)); if (!$compressed_png_content) { throw new Exception("Conversion to compressed PNG failed. Is pngquant 1.8+ installed on the server?"); } return $compressed_png_content; }
그런데 보니 shell_exec를 이용한다. 보안상 안좋은데.... 라며 그냥 진행한다.
간단히 테스트 하기위해서 업로드 HTML과 해당 파일을 받는것을 해 보았다.
잘된다....
쓸만한 놈을 구했다.
OPENJPEG도 써야 할텐데..... 그건 다음 기회에...
'Programing > PHP' 카테고리의 다른 글
[PHP] 비교연산자와 삼항 연산자(조건부 연산자) 알아보기. (0) | 2015.12.21 |
---|---|
JSON을 이용한 통신 시 한글이 깨질때를 대비하여 만든 함수 (0) | 2015.12.09 |
PHP Mailer 를 이용한 메일 발송 클래스 제작 (0) | 2015.12.07 |