diff --git a/lib/thumb.lib.php b/lib/thumb.lib.php new file mode 100644 index 000000000..5d4a24f99 --- /dev/null +++ b/lib/thumb.lib.php @@ -0,0 +1,128 @@ +run(이미지 경로가 포함된 컨텐츠); + +*******************************************************************************/ +class g4_thumb { + var $path; + var $width; + var $red = 0xff; + var $green = 0xff; + var $blue = 0xff; + var $quality = 100; + var $permission = 0606; + + function g4_thumb($path, $width) { + $this->set_path($path); + $this->set_width($width); + } + + // 경로 + function set_path($path) { + $this->path = $path; + @mkdir($path, 0707); + @chmod($path, 0707); + } + + function set_width($width) { + $this->width = $width; + } + + function get_width() { + return $this->width; + } + + function set_bgcolor($red, $green, $blue) { + $this->red = $red; + $this->green = $green; + $this->blue = $blue; + } + + function set_quality($quality) { + $this->quality = $quality; + } + + function set_permission($permission) { + $this->permission = $permission; + } + + function create($srcimg, $thumbfile) { + $width = $this->get_width(); + $source = null; + $size = @getimagesize($srcimg); + if ($size[2] == 1) + $source = @imagecreatefromgif($srcimg); + else if ($size[2] == 2) + $source = @imagecreatefromjpeg($srcimg); + else if ($size[2] == 3) + $source = @imagecreatefrompng($srcimg); + + if ($source == null) + return ''; + + // 이미지의 폭이 설정폭 보다 작다면 + if ($size[0] < $width) { + $width = $size[0]; + $height = $size[1]; + } else { + $rate = $width / $size[0]; + $height = (int)($size[1] * $rate); + } + + $target = @imagecreatetruecolor($width, $height); + $bgcolor = @imagecolorallocate($target, $this->red, $this->green, $this->blue); // 썸네일 배경 + imagefilledrectangle($target, 0, 0, $width, $height, $bgcolor); + imagecopyresampled($source, $source, 0, 0, 0, 0, $width, $height, $size[0], $size[1]); + imagecopy($target, $source, 0, 0, 0, 0, $size[0], $size[1]); + imagejpeg($target, $thumbfile, $this->quality); + chmod($thumbfile, $this->permission); // 추후 삭제를 위하여 파일모드 변경 + return $thumbfile; + } + + function thumbnail($matches) + { + foreach ($matches as $img) { + preg_match("/src=[\"\']?([^\"\'\s>]+)/i", $img, $m); + $src = trim($m[1]); + + $result = true; + if (preg_match("/\.(jpe?g|png|gif)$/i", $src)) { + // 유일한 파일명을 만든다. + $filename = md5($src).'_'.$this->width; + $thumb = $this->path.'/'.$filename; + + if (!file_exists($thumb)) { + $result = $this->create($src, $thumb); + } + } + else { + $thumb = $src; + } + + if ($result) { + $size = @getimagesize($src); + if ($size[0] < $this->width) { + return ""; + } else { + return ""; + } + } + } + } + + function run($content) + { + //return preg_replace_callback('#]+>#iS', create_function('$matches', 'return g4_thumb::thumbnail($matches);'), $content); + //return preg_replace_callback('#]+>#iS', array('g4_thumb', 'thumbnail'), $content); + //return preg_replace_callback('#]+>#iS', 'g4_thumb::thumbnail', $content); + return preg_replace_callback('#]+>#iS', array($this, 'thumbnail'), $content); + } +} +?> \ No newline at end of file