<?php

if ( !function_exists('sys_get_temp_dir')) {

    function sys_get_temp_dir() {

        if( $temp=getenv('TMP') ) return $temp;
        if( $temp=getenv('TEMP') ) return $temp;
        if( $temp=getenv('TMPDIR') ) return $temp;
        $temp=tempnam(__FILE__,'');
        if (file_exists($temp)) {

            unlink($temp);
            return dirname($temp);
        }
        return null;
    }
}



/*
ÀÌ¸§ : get_image_resource_from_file

¿ëµµ : ÀÌ¹ÌÁöÆÄÀÏ(gif, jpg, png ¸¸ Áö¿ø)·ÎºÎÅÍ ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ »ý¼ºÇÑ´Ù

¼º°ø½Ã ¸®ÅÏ°ª : ÀÌ¹ÌÁö ¸®¼Ò½º id ¿Í getimagesize ·Î ¹Þ¾Æ¿Â ÀÌ¹ÌÁö Á¤º¸¸¦ ¹è¿­·Î ¹ÝÈ¯
==> Array(0=>image resource, 1=>image width, 2=>image height, 3=>image type, 4=>image attribute);

½ÇÆÐ½Ã ¸®ÅÏ°ª : ºó ¹è¿­ ¹ÝÈ¯
==> Array()

ÀÎÀÚ :
==> $path_file : ÀÌ¹ÌÁöÀÇ Àý´ë°æ·Î ¶Ç´Â »ó´ë°æ·Î
*/

function get_image_resource_from_file($path_file){

    if (!is_file($path_file)) {//ÆÄÀÏÀÌ ¾Æ´Ï¶ó¸é

        $GLOBALS['errormsg'] = $path_file . 'Àº ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù.';

        return Array();
    }

    $size = @getimagesize($path_file);
    if (empty($size[2])) {//ÀÌ¹ÌÁö Å¸ÀÔÀÌ ¾ø´Ù¸é

        $GLOBALS['errormsg'] = $path_file . 'Àº ÀÌ¹ÌÁö ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù.';

        return Array();
    }

    if ($size[2] != 1 && $size[2] != 2 && $size[2] != 3) {//Áö¿øÇÏ´Â ÀÌ¹ÌÁö Å¸ÀÔÀÌ ¾Æ´Ï¶ó¸é

        $GLOBALS['errormsg'] = $path_file . 'Àº gif ³ª jpg, png ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù.';

        return Array();
    }

    switch($size[2]){//image type¿¡ µû¶ó ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ »ý¼ºÇÑ´Ù.

        case 1 : //gif

            $im = @imagecreatefromgif($path_file);
            break;

        case 2 : //jpg

            $im = @imagecreatefromjpeg($path_file);
            break;

        case 3 : //png

            $im = @imagecreatefrompng($path_file);
            break;
    }

    if ($im === false) {//ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ °¡Á®¿À±â¿¡ ½ÇÆÐÇÏ¿´´Ù¸é

        $GLOBALS['errormsg'] = $path_file . ' ¿¡¼­ ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ °¡Á®¿À´Â °Í¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.';

        return Array();
    }
    else {//ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ °¡Á®¿À±â¿¡ ¼º°øÇÏ¿´´Ù¸é

        $return = $size;
        $return[0] = $im;
        $return[1] = $size[0];//³Êºñ
        $return[2] = $size[1];//³ôÀÌ
        $return[3] = $size[2];//ÀÌ¹ÌÁöÅ¸ÀÔ
        $return[4] = $size[3];//ÀÌ¹ÌÁö attribute

        return $return;
    }
}



/*
ÀÌ¸§ : check_savable

¿ëµµ : ÀÎÀÚ·Î ¹ÞÀº ÆÄÀÏ °æ·Î·Î ÀúÀå°¡´ÉÇÑÁö ¿©ºÎ È®ÀÎ

¼º°ø½Ã ¸®ÅÏ°ª : true

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $path_save_file : ÀúÀåµÉ ÆÄÀÏÀÇ Àý´ë °æ·Î ¶Ç´Â »ó´ë°æ·Î
*/

function check_savable($path_save_file){

    $path_save_dir = dirname($path_save_file);//ÀúÀå ÆÄÀÏ °æ·Î¿¡¼­ »óÀ§ µð·ºÅä¸® °æ·Î¸¦ °¡Á®¿È
    if (!is_dir($path_save_dir)) {//»óÀ§µð·ºÅä¸®°¡ µð·ºÅä¸®°¡ ¾Æ´Ï¶ó¸é

        $GLOBALS['errormsg'] = $path_save_dir . 'Àº µð·ºÅä¸®°¡ ¾Æ´Õ´Ï´Ù.';

        return false;
    }

    if (!is_writable($path_save_dir)){//ÇØ´ç µð·ºÅä¸®¿¡ ÆÄÀÏÀ» ÀúÀåÇÒ ±ÇÇÑÀÌ ¾ø´Ù¸é

        $GLOBALS['errormsg'] = $path_save_dir . '¿¡ ÀÌ¹ÌÁö¸¦ ÀúÀåÇÒ ±ÇÇÑÀÌ ¾ø½À´Ï´Ù.';

        return false;
    }

    if (is_dir($path_save_file)) {//°°Àº ÀÌ¸§ÀÇ µð·ºÅä¸®°¡ Á¸ÀçÇÏ¸é

        $GLOBALS['errormsg'] = $path_save_file . 'Àº ÀÌ¹Ì °°Àº ÀÌ¸§ÀÇ µð·ºÅä¸®°¡ Á¸ÀçÇÕ´Ï´Ù.';

        return false;
    }

    return true;
}



/*
ÀÌ¸§ : save_image_from_resource

¿ëµµ : image resouce ¸¦ °¡Áö°í ÆÄÀÏ·Î ÀúÀå

¼º°ø½Ã ¸®ÅÏ°ª : true

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $im : ÀÌ¹ÌÁö ¸®¼Ò½º id
==> $path_save_file : ÀúÀåµÉ ÆÄÀÏÀÇ Àý´ë °æ·Î ¶Ç´Â »ó´ë°æ·Î
==> $quality : ÀúÀåµÇ´Â ÆÄÀÏÀÇ ÁúÀ» °áÁ¤
                            ==> 100 ÀÌÇÏÀÇ Á¤¼ö·Î ÁöÁ¤, ³ôÀ»¼ö·Ï ÁúÀÌ ³ôÀ½
                            ==> »ý·«ÇÏ¸é ÀÚµ¿À¸·Î ±âº»°ªÀº 70
==> $save_force : µ¿ÀÏ °æ·Î¿¡ ÀÌ¹Ì ÆÄÀÏÀÌ Á¸ÀçÇÒ¶§
                                         ==> 0 ÀÌ¸é ÀúÀåÇÏÁö ¾Ê°í false ¹ÝÈ¯
                                         ==> 1 ÀÌ¸é ÀúÀåÇÏÁö ¾Ê°í true ¹ÝÈ¯
                                         ==> 2 ÀÌ¸é ±âÁ¸ °ÍÀº Áö¿ì°í »õ·Î ÀúÀå
                                         ==> »ý·«ÇÏ¸é ÀÚµ¿À¸·Î ±âº»°ªÀº 0

Âü°í :
==> gif ÀÌ¹ÌÁö´Â $quality ÀÇ ¿µÇâÀ» ¹ÞÁö ¾ÊÀ½
*/

function save_image_from_resource($im, $path_save_file, $quality=70, $save_force=0){

    //°³º° »ç¿ëµÉ¼öµµ ÀÖÀ¸¹Ç·Î ÇÑ¹ø ´õ Ã¼Å©
    $result_writable = check_savable($path_save_file);
    if (empty($result_writable)) return false;

    if (is_file($path_save_file)){//°°Àº ÀÌ¸§ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÏ¸é

        if ($save_force == 1) {//»õ·Î ÀúÀåÇÏÁö ¾Ê°í true ¹ÝÈ¯

            return true;
        }
        else if ($save_force == 2){//±âÁ¸ ÆÄÀÏÀº »èÁ¦

            $result_unlink = @unlink($path_save_file);
            if ($result_unlink === false) {//±âÁ¸ ÀÌ¹ÌÁö »èÁ¦¿¡ ½ÇÆÐ

                $GLOBALS['errormsg'] = '±âÁ¸¿¡ Á¸ÀçÇÏ´ø ' . $path_save_file . 'ÀÇ »èÁ¦¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.';

                return false;
            }
        }
        else {//0 ÀÌ°Å³ª Á¤ÇØÁöÁö ¾ÊÀº °ªÀÏ¶§ false¸¦ ¹ÝÈ¯

            $GLOBALS['errormsg'] = $path_save_file . 'Àº ÀÌ¹Ì °°Àº ÀÌ¸§ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù.';

            return false;
        }
    }

    //ÆÄÀÏ¸í¿¡¼­ ¸¶Áö¸· . À» ±âÁØÀ¸·Î È®ÀåÀÚ¸¦ °¡Á®¿Í¼­ ¼Ò¹®ÀÚ·Î º¯È¯
    $extension = strtolower(substr($path_save_file, strrpos($path_save_file, '.') + 1));

    switch($extension){//È®ÀåÀÚ¿¡ µû¶ó ÀÌ¹ÌÁö ÀúÀå Ã³¸®

        case 'gif' :

            $result_save = @imagegif($im, $path_save_file);
            break;

        case 'jpg' :

        case 'jpeg' :

            $result_save = @imagejpeg($im, $path_save_file, $quality);
            break;

        default : //È®ÀåÀÚ png ¶Ç´Â È®ÀåÀÚ°¡ ¾ø´Â °æ¿ì, Á¤ÀÇµÇÁö ¾Ê´Â È®ÀåÀÚÀÎ °æ¿ì´Â ¸ðµÎ png·Î ÀúÀå

            $result_save = @imagepng($im, $path_save_file);
    }

    if ($result_save === false) {//ÀÌ¹ÌÁö ÀúÀå¿¡ ½ÇÆÐ

        $GLOBALS['errormsg'] = $path_save_file . 'ÀÇ ÀúÀå¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.';

        return false;
    }
    else {//ÀÌ¹ÌÁö ÀúÀå¿¡ ¼º°ø

        return true;
    }
}



/*
ÀÌ¸§ : get_size_by_rule

¿ëµµ : Å«ÀÌ¹ÌÁöÀÇ ³Êºñ¿Í ³ôÀÌ¸¦ °¡Áö°í Á¤ºñÀ²ÀÇ ÀÛÀº ÀÌ¹ÌÁö ³Êºñ ³ª ³ôÀÌ¸¦ ±¸ÇÔ

¼º°ø½Ã ¸®ÅÏ°ª : 0º¸´Ù Å« Á¤¼ö°ª

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $src_w : Å«ÀÌ¹ÌÁöÀÇ ³Êºñ, 0º¸´Ù Å« Á¤¼ö¸¸ °¡´É
==> $src_h : Å«ÀÌ¹ÌÁöÀÇ ³ôÀÌ, 0º¸´Ù Å« Á¤¼ö¸¸ °¡´É
==> $dst_size : ÀÛÀº ÀÌ¹ÌÁöÀÇ Á¤ÇØÁø ³Êºñ ³ª ³ôÀÌ, ³Êºñ ÀÏ °æ¿ì ³ôÀÌ ¹ÝÈ¯, ³ôÀÌ ÀÏ °æ¿ì ³Êºñ ¹ÝÈ¯
==> $rule : $dst_size ÀÇ °ªÀÌ ³Êºñ ÀÎÁö ³ôÀÌÀÎÁö ÁöÁ¤
                    ==> °ªÀ¸·Î´Â width, height °¡ ¿Ã¼ö ÀÖ´Ù.
                    ==> »ý·«ÇÏ°Å³ª height °¡ ¾Æ´Ï¸é ¸ðµÎ width·Î ÀÎ½Ä
*/

function get_size_by_rule($src_w, $src_h, $dst_size, $rule='width'){

    //Á¤¼öÇüÀÌ ¾Æ´Ï¶ó¸é Á¤¼öÇüÀ¸·Î °­Á¦ Çüº¯È¯
    if (!is_int($src_w)) settype($src_w, 'int');
    if (!is_int($src_h)) settype($src_h, 'int');
    if (!is_int($dst_size)) settype($dst_size, 'int');

    if ($src_w < 1 || $src_h < 1){//¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_w, $src_h)";

        return false;
    }

    if ($dst_size < 1){//¸®»çÀÌÁî µÉ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¸®»çÀÌÁîµÉ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_size)";

        return false;
    }

    if ($rule != 'height') {//±âÁØ°ªÀÌ ³ÊºñÀÏ °æ¿ì, °ªÀÌ height °¡ ¾Æ´Ï¸é ÀüºÎ width ·Î ÆÇ´Ü

        return ceil($dst_size / $src_w * $src_h);
    }
    else {//±âÁØ°ªÀÌ ³ôÀÌÀÏ °æ¿ì

        return ceil($dst_size / $src_h * $src_w);
    }
}



/*
ÀÌ¸§ : get_bigsize_by_rule

¿ëµµ : ÀÛÀº ÀÌ¹ÌÁöÀÇ ³Êºñ¿Í ³ôÀÌ¸¦ °¡Áö°í Á¤ºñÀ²ÀÇ Å« ÀÌ¹ÌÁö ³Êºñ ³ª ³ôÀÌ¸¦ ±¸ÇÔ

¼º°ø½Ã ¸®ÅÏ°ª : 0º¸´Ù Å« Á¤¼ö°ª

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $dst_w : ÀÛÀºÀÌ¹ÌÁöÀÇ ³Êºñ, 0º¸´Ù Å« Á¤¼ö¸¸ °¡´É
==> $dst_h : ÀÛÀºÀÌ¹ÌÁöÀÇ ³ôÀÌ, 0º¸´Ù Å« Á¤¼ö¸¸ °¡´É
==> $src_size : Å« ÀÌ¹ÌÁöÀÇ Á¤ÇØÁø ³Êºñ ³ª ³ôÀÌ, ³Êºñ ÀÏ °æ¿ì ³ôÀÌ ¹ÝÈ¯, ³ôÀÌ ÀÏ °æ¿ì ³Êºñ ¹ÝÈ¯
==> $rule : $src_size ÀÇ °ªÀÌ ³Êºñ ÀÎÁö ³ôÀÌÀÎÁö ÁöÁ¤
                    ==> °ªÀ¸·Î´Â width, height °¡ ¿Ã¼ö ÀÖ´Ù.
                    ==> »ý·«ÇÏ°Å³ª height °¡ ¾Æ´Ï¸é ¸ðµÎ width·Î ÀÎ½Ä
*/

function get_bigsize_by_rule($dst_w, $dst_h, $src_size, $rule='width'){

    //Á¤¼öÇüÀÌ ¾Æ´Ï¶ó¸é Á¤¼öÇüÀ¸·Î °­Á¦ Çüº¯È¯
    if (!is_int($dst_w)) settype($dst_w, 'int');
    if (!is_int($dst_h)) settype($dst_h, 'int');
    if (!is_int($src_size)) settype($src_size, 'int');

    if ($dst_w < 1 || $dst_h < 1){//½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_w, $dst_h)";

        return false;
    }

    if ($src_size < 1){//¿øº»ÀÇ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¿øº»ÀÇ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_size)";

        return false;
    }

    if ($rule != 'height') {//±âÁØ°ªÀÌ ³ÊºñÀÏ °æ¿ì, °ªÀÌ height °¡ ¾Æ´Ï¸é ÀüºÎ width ·Î ÆÇ´Ü

        return ceil($src_size / $dst_w * $dst_h);
    }
    else {//±âÁØ°ªÀÌ ³ôÀÌÀÏ °æ¿ì

        return ceil($src_size / $dst_h * $dst_w);
    }
}



/*
ÀÌ¸§ : get_image_resize

¿ëµµ : ¿øº»ÀÇ ¸®¼Ò½º¸¦ °¡Áö°í ÁÖ¾îÁø Á¶°ÇÀ¸·Î ¸®»çÀÌÁî Ã³¸®ÇÑ ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ »ý¼º

¼º°ø½Ã ¸®ÅÏ°ª : ½æ³×ÀÏ ¸®¼Ò½º id

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $src : ¿øº»ÀÇ ¸®¼Ò½º id
==> $src_w : ¿øº»ÀÇ ³Êºñ
==> $src_h : ¿øº»ÀÇ ³ôÀÌ
==> $dst_w : »ý¼ºÇÒ ½æ³×ÀÏÀÇ ³Êºñ, 0 ÀÌ»óÀÇ Á¤¼ö
==> $dst_h : »ý¼ºÇÒ ½æ³×ÀÏÀÇ ³ôÀÌ, 0 ÀÌ»óÀÇ Á¤¼ö
                         ==> »ý·« °¡´ÉÇÏ¸ç »ý·«½Ã¿¡´Â ÀÚµ¿À¸·Î 0À¸·Î °ªÀÌ µé¾î°¨

Âü°í :
==> $dst_w ¿Í $dst_h ¸ðµÎ °ªÀÌ 0ÀÌ µÉ¼ö ¾øÀ½
==> µÑ´Ù 0º¸´Ù Å¬ °æ¿ì, °­Á¦ ¸®»çÀÌÁîÇÏ¿© ½æ³×ÀÏ ¸®¼Ò½º »ý¼º
==> µÑÁß ÇÏ³ª°¡ 0 ÀÌ¸é, 0ÀÌ ¾Æ´Ñ ÂÊÀ» ±âÁØÀ¸·Î Á¤ºñÀ²·Î ¸®»çÀÌÁî ÇÏ¿© ½æ³×ÀÏ »ý¼º
*/

function get_image_resize($src, $src_w, $src_h, $dst_w, $dst_h=0){

    if (empty($src))    {//¿øº»ÀÇ ¸®¼Ò½º id °¡ ºó°ªÀÏ °æ¿ì

        $GLOBALS['errormsg'] = '¿øº» ¸®¼Ò½º°¡ ¾ø½À´Ï´Ù.';

        return false;
    }

    //Á¤¼öÇüÀÌ ¾Æ´Ï¶ó¸é Á¤¼öÇüÀ¸·Î °­Á¦ Çüº¯È¯
    if (!is_int($src_w)) settype($src_w, 'int');
    if (!is_int($src_h)) settype($src_h, 'int');
    if (!is_int($dst_w)) settype($dst_w, 'int');
    if (!is_int($dst_h)) settype($dst_h, 'int');

    if ($src_w < 1 || $src_h < 1){//¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_w, $src_h)";

        return false;
    }

    if (empty($dst_w) && empty($dst_h)) {//½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ µÑ´Ù ¾øÀ» °æ¿ì

        $GLOBALS['errormsg'] = '½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ´Â µÑÁß¿¡ ÇÏ³ª´Â ¹ÝµíÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.';

        return false;
    }

    if (!empty($dst_w) && $dst_w < 1){//½æ³×ÀÏÀÇ ³Êºñ°¡ Á¸ÀçÇÏ´Âµ¥ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "½æ³×ÀÏÀÇ ³Êºñ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_w)";

        return false;
    }

    if (!empty($dst_h) && $dst_h < 1){//½æ³×ÀÏÀÇ ³ôÀÌ°¡ Á¸ÀçÇÏ´Âµ¥ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "½æ³×ÀÏÀÇ ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_h)";

        return false;
    }

    //½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª°¡ ¾ø´Â °æ¿ì¿¡´Â Á¤ºñÀ²À» ÀÇ¹ÌÇÏ¸ç, ºñÀ²µ¥·Î ³Êºñ¿Í ³ôÀÌ¸¦ °áÁ¤ÇÑ´Ù.
    if (empty($dst_w) || empty($dst_h)) {

        if (empty($dst_h)) $dst_h = get_size_by_rule($src_w, $src_h, $dst_w, 'width');
        else $dst_w = get_size_by_rule($src_w, $src_h, $dst_h, 'height');
    }

    //$dst_w , $dst_h Å©±âÀÇ ½æ³×ÀÏ ¸®¼Ò½º¸¦ »ý¼ºÇÑ´Ù.
    $dst = @imagecreatetruecolor($dst_w , $dst_h);
    if ($dst === false) {

        $GLOBALS['errormsg'] = "$dst_w , $dst_h Å©±âÀÇ ½æ³×ÀÏ ¸®¼Ò½º¸¦ »ý¼ºÇÏÁö ¸øÇß½À´Ï´Ù.";

        return false;
    }

    //¸®»çÀÌÁî Ã³¸®
    $result_resize = imagecopyresampled($dst , $src , 0 , 0 , 0 , 0 , $dst_w , $dst_h , $src_w , $src_h );
    if ($result_resize === false) {

        $GLOBALS['errormsg'] = "$dst_w , $dst_h Å©±â·Î ¸®»çÀÌÁî¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

        return false;
    }

    return $dst;
}



/*
ÀÌ¸§ : get_image_cropresize

¿ëµµ : ¿øº»ÀÇ ¸®¼Ò½º¸¦ °¡Áö°í ÁÖ¾îÁø Á¶°ÇÀ¸·Î Å©·Ó ÈÄ ¸®»çÀÌÁî Ã³¸®ÇÑ ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ »ý¼º

¼º°ø½Ã ¸®ÅÏ°ª : ½æ³×ÀÏ ¸®¼Ò½º id

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $src : ¿øº»ÀÇ ¸®¼Ò½º id
==> $src_w : ¿øº»ÀÇ ³Êºñ
==> $src_h : ¿øº»ÀÇ ³ôÀÌ
==> $dst_w : »ý¼ºÇÒ ½æ³×ÀÏÀÇ ³Êºñ, 0 ÀÌ»óÀÇ Á¤¼ö
==> $dst_h : »ý¼ºÇÒ ½æ³×ÀÏÀÇ ³ôÀÌ, 0 ÀÌ»óÀÇ Á¤¼ö
                         ==> »ý·« °¡´ÉÇÏ¸ç »ý·«½Ã¿¡´Â ÀÚµ¿À¸·Î 0À¸·Î °ªÀÌ µé¾î°¨
==> $pos_width : ³Êºñ¸¦ ±âÁØÀ¸·Î Å©·ÓÇÒ¶§ ¾î´ÀºÎºÐÀ» Å©·ÓÇÒÁö ÁöÁ¤
                                     ==> 1 ÀÏ°æ¿ì¿¡´Â ¿ÞÂÊÀ» ±âÁØÀ¸·Î Å©·Ó
                                     ==> 2 ÀÏ°æ¿ì¿¡´Â Áß¾ÓÀ» ±âÁØÀ¸·Î Å©·Ó
                                     ==> 3 ÀÏ°æ¿ì¿¡´Â ¿À¸¥ÂÊÀ» ±âÁØÀ¸·Î Å©·Ó
                                     ==> »ý·«°¡´ÉÇÏ¸ç »ý·«½Ã¿¡´Â ÀÚµ¿À¸·Î 2 ·Î °ªÀÌ µé¾î°¨
==> $pos_height : ³ôÀÌ¸¦ ±âÁØÀ¸·Î Å©·ÓÇÒ¶§ ¾î´ÀºÎºÐÀ» Å©·ÓÇÒÁö ÁöÁ¤
                                     ==> 1 ÀÏ°æ¿ì¿¡´Â »ó´ÜÀ» ±âÁØÀ¸·Î Å©·Ó
                                     ==> 2 ÀÏ°æ¿ì¿¡´Â °¡¿îµ¥¸¦ ±âÁØÀ¸·Î Å©·Ó
                                     ==> 3 ÀÏ°æ¿ì¿¡´Â ÇÏ´ÜÀ» ±âÁØÀ¸·Î Å©·Ó
                                     ==> »ý·«°¡´ÉÇÏ¸ç »ý·«½Ã¿¡´Â ÀÚµ¿À¸·Î 2 ·Î °ªÀÌ µé¾î°¨

Âü°í :
==> $dst_w ¿Í $dst_h ¸ðµÎ °ªÀÌ 0ÀÌ µÉ¼ö ¾øÀ½
==> µÑ´Ù 0º¸´Ù Å¬ °æ¿ì, °­Á¦ ¸®»çÀÌÁîÇÏ¿© ½æ³×ÀÏ ¸®¼Ò½º »ý¼º
==> µÑÁß ÇÏ³ª°¡ 0 ÀÌ¸é, 0ÀÌ ¾Æ´Ñ ÂÊÀ» ±âÁØÀ¸·Î Á¤ºñÀ²·Î ¸®»çÀÌÁî ÇÏ¿© ½æ³×ÀÏ »ý¼º
*/

function get_image_cropresize($src, $src_w, $src_h, $dst_w, $dst_h=0, $pos_width=2, $pos_height=2){

    if (empty($src))    {//¿øº»ÀÇ ¸®¼Ò½º id °¡ ºó°ªÀÏ °æ¿ì

        $GLOBALS['errormsg'] = '¿øº» ¸®¼Ò½º°¡ ¾ø½À´Ï´Ù.';

        return false;
    }

    //Á¤¼öÇüÀÌ ¾Æ´Ï¶ó¸é Á¤¼öÇüÀ¸·Î °­Á¦ Çüº¯È¯
    if (!is_int($src_w)) settype($src_w, 'int');
    if (!is_int($src_h)) settype($src_h, 'int');
    if (!is_int($dst_w)) settype($dst_w, 'int');
    if (!is_int($dst_h)) settype($dst_h, 'int');

    if ($src_w < 1 || $src_h < 1){//¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_w, $src_h)";

        return false;
    }

    if (empty($dst_w) && empty($dst_h)) {//½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ µÑ´Ù ¾øÀ» °æ¿ì

        $GLOBALS['errormsg'] = '½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ´Â µÑÁß¿¡ ÇÏ³ª´Â ¹ÝµíÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù.';

        return false;
    }

    if (!empty($dst_w) && $dst_w < 1){//½æ³×ÀÏÀÇ ³Êºñ°¡ Á¸ÀçÇÏ´Âµ¥ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "½æ³×ÀÏÀÇ ³Êºñ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_w)";

        return false;
    }

    if (!empty($dst_h) && $dst_h < 1){//½æ³×ÀÏÀÇ ³ôÀÌ°¡ Á¸ÀçÇÏ´Âµ¥ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "½æ³×ÀÏÀÇ ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_h)";

        return false;
    }

    //½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª°¡ ¾ø´Â °æ¿ì¿¡´Â Á¤ºñÀ²À» ÀÇ¹ÌÇÏ¸ç, ºñÀ²µ¥·Î ³Êºñ¿Í ³ôÀÌ¸¦ °áÁ¤ÇÑ´Ù.
    if (empty($dst_w) || empty($dst_h)) {

        if (empty($dst_h)) $dst_h = get_size_by_rule($src_w, $src_h, $dst_w, 'width');
        else $dst_w = get_size_by_rule($src_w, $src_h, $dst_h, 'height');
    }

    //$dst_w , $dst_h Å©±âÀÇ ½æ³×ÀÏ ¸®¼Ò½º¸¦ »ý¼ºÇÑ´Ù.
    $dst = @imagecreatetruecolor($dst_w , $dst_h);
    if ($dst === false) {

        $GLOBALS['errormsg'] = "$dst_w , $dst_h Å©±âÀÇ ½æ³×ÀÏ ¸®¼Ò½º¸¦ »ý¼ºÇÏÁö ¸øÇß½À´Ï´Ù.";

        return false;
    }

    //½æ³×ÀÏÀÇ ³Êºñ¸¦ ±âÁØÀ¸·Î Á¤ºñÀ²ÀÇ ½æ³×ÀÏÀÇ ³ôÀÌ¸¦ ±¸ÇÑ´Ù.
    $s_w = $dst_w;
    $s_h = get_size_by_rule($src_w, $src_h, $s_w, 'width');

    //±âº»°ª
    $src_x = 0;
    $src_y = 0;
    $src_nw = $src_w;
    $src_nh = $src_h;

    if ($dst_h != $s_h) {//³ôÀÌ°¡ ´Ù¸§, Áï, Å©·ÓÀ» ÇØ¾ß ÇÑ´Ù´Â ¶æ

        if ($dst_h < $s_h) {//ÁöÁ¤µÈ ³ôÀÌ°¡ Á¤ºñÀ² ³ôÀÌ º¸´Ù ÀÛÀ»°æ¿ì, ³ôÀÌ¸¦ ±âÁØÀ¸·Î $pos_height ·Î Å©·Ó

            //½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ¸¦ °¡Áö°í Á¤ºñÀ²ÀÇ Å«ÀÌ¹ÌÁöÀÇ ³ôÀÌ¸¦ ±¸ÇÑ´Ù.
            $src_nh = get_bigsize_by_rule($dst_w, $dst_h, $src_w, 'width');

            $src_x = 0;

            if ($pos_height == 1) $src_y = 0;//»ó´Ü ±âÁØÁ¡ yÁÂÇ¥ ±¸ÇÔ
            else if ($pos_height == 2) $src_y = ceil(($src_h - $src_nh) / 2);//°¡¿îµ¥ ±âÁØÁ¡ yÁÂÇ¥ ±¸ÇÔ
            else $src_y = $src_h - $src_nh;//ÇÏ´Ü ±âÁØÁ¡ yÁÂÇ¥ ±¸ÇÔ
        }
        else {//ÁöÁ¤µÈ ³ôÀÌ°¡ Á¤ºñÀ² ³ôÀÌ º¸´Ù Å«°æ¿ì, ³Êºñ¸¦ ±âÁØÀ¸·Î $pos_width Å©·Ó

            ////½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ¸¦ °¡Áö°í Á¤ºñÀ²ÀÇ ¿øº» ³Êºñ¸¦ ±¸ÇÑ´Ù.
            $src_nw = get_bigsize_by_rule($dst_w, $dst_h, $src_h, 'height');

            if ($pos_width == 1) $src_x = 0;//¿ÞÂÊ ±âÁØÁ¡ yÁÂÇ¥ ±¸ÇÔ
            else if ($pos_width == 2) $src_x = ceil(($src_w - $src_nw) / 2);//Áß¾Ó ±âÁØÁ¡ yÁÂÇ¥ ±¸ÇÔ
            else $src_x = $src_w - $src_nw;//¿À¸¥ÂÊ ±âÁØÁ¡ yÁÂÇ¥ ±¸ÇÔ

            $src_y = 0;
        }
    }

    $result_resize = imagecopyresampled($dst , $src , 0 , 0 , $src_x , $src_y , $dst_w , $dst_h , $src_nw , $src_nh );
    if ($result_resize === false) {

        $GLOBALS['errormsg'] = "$dst_w , $dst_h Å©±â·Î Å©·Ó ¹× ¸®»çÀÌÁî¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

        return false;
    }

    return $dst;
}



/*
ÀÌ¸§ : proc_watermark

¿ëµµ : ¿øº»ÀÇ ¸®¼Ò½º¸¦ °¡Áö°í ¿öÅÍ¸¶Å© ÀÌ¹ÌÁö¸¦ ÁÖ¾îÁø Á¶°Ç¿¡ µû¶ó Âï´Â´Ù.

¼º°ø½Ã ¸®ÅÏ°ª : true

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $src : ¿øº»ÀÇ ¸®¼Ò½º id
==> $src_w : ¿øº»ÀÇ ³Êºñ
==> $src_h : ¿øº»ÀÇ ³ôÀÌ
==> $path_mark_file : ¿öÅÍ¸¶Å©·Î »ç¿ëµÉ ÀÌ¹ÌÁöÆÄÀÏÀÇ ÀüÃ¼°æ·Î ¶Ç´Â »ó´ë°æ·Î
==> $pos : ¿öÅÍ¸¶Å©¸¦ ÂïÀ» Æ÷Áö¼ÇÀ» ¼ýÀÚ·Î ÁöÁ¤
                    ==> 1 ÀÏ°æ¿ì¿¡´Â »ó´Ü ¿ÞÂÊ¿¡ ÇÑ¹ø¸¸
                    ==> 2 ÀÏ°æ¿ì¿¡´Â »ó´Ü ¿À¸¥ÂÊ¿¡ ÇÑ¹ø¸¸
                    ==> 3 ÀÏ°æ¿ì¿¡´Â ÇÏ´Ü ¿ÞÂÊ¿¡ ÇÑ¹ø¸¸
                    ==> 4 ÀÏ°æ¿ì¿¡´Â ÇÏ´Ü ¿À¸¥ÂÊ¿¡ ÇÑ¹ø¸¸
                    ==> 5 ÀÏ °æ¿ì¿¡´Â Áß¾Ó¿¡ ÇÑ¹ø¸¸
                    ==> 10 ÀÏ °æ¿ì¿¡´Â ÀüÃ¼¸¦ ¹Ýº¹ÇØ¼­
                    ==> ±× ¿ÜÀÇ °ªÀº 4·Î Ã³¸®
==> $sharpness : ¿öÅÍ¸¶Å©ÀÇ ¼±¸íµµ, 0ºÎÅÍ 100 ±îÁöÀÇ Á¤¼ö¸¸ °¡´É
                                        ==> 100 ÀÏ °æ¿ì¿¡´Â Åõ¸íÀÌ¹ÌÁö¸¦ »ç¿ëÇÏ´Â°ÍÀ¸·Î °£ÁÖ, Åõ¸íÀÌ¹ÌÁö·Î ¿öÅÍ¸¶Å© Ã³¸®
==> $padding : ¿öÅÍ¸¶Å© »çÀÌÀÇ °£°Ý, »ý·«°¡´ÉÇÏ¸ç »ý·«½Ã ÀÚµ¿À¸·Î 0 ·Î °ªÀÌ µé¾î°¨
*/

function proc_watermark($src, $src_w, $src_h, $path_mark_file, $pos, $sharpness, $padding=0){

    if (empty($src))    {//¿øº»ÀÇ ¸®¼Ò½º id °¡ ºó°ªÀÏ °æ¿ì

        $GLOBALS['errormsg'] = '¿øº» ¸®¼Ò½º°¡ ¾ø½À´Ï´Ù.';

        return false;
    }

    //Á¤¼öÇüÀÌ ¾Æ´Ï¶ó¸é Á¤¼öÇüÀ¸·Î °­Á¦ Çüº¯È¯
    if (!is_int($src_w)) settype($src_w, 'int');
    if (!is_int($src_h)) settype($src_h, 'int');
    if (!is_int($sharpness)) settype($sharpness, 'int');
    if (!is_int($padding)) settype($padding, 'int');

    if ($src_w < 1 || $src_h < 1){//¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_w, $src_h)";

        return false;
    }

    if (empty($path_mark_file)) {//¿öÅÍ¸¶Å© ÀÌ¹ÌÁö °æ·Î°ªÀÌ ¾ø´Ù¸é

        $GLOBALS['errormsg'] = '¿öÅÍ¸¶Å© ÀÌ¹ÌÁö°æ·Î°ªÀÌ ¾ø½À´Ï´Ù.';

        return false;
    }

    list($mark, $mark_w, $mark_h) = get_image_resource_from_file($path_mark_file);

    if (empty($mark)) return false;//¿¡·¯ ¸Þ½ÃÁö ÀÛ¼ºÀº get_image_resource_from_file ³»ºÎ¿¡¼­ ÇÔ

    if ($src_w < $mark_w + (2 * $padding)) {//¿øº»³Êºñ°¡ ¿öÅÍ¸¶Å© ÀÌ¹ÌÁö ³Êºñº¸´Ù ÀÛÀ¸¸é ¿öÅÍ¸¶Å© Ã³¸® ¾ÈÇÔ, return true;

        return true;
    }

    if ($src_h < $mark_h + (2 * $padding)) {//¿øº»³ôÀÌ°¡ ¿öÅÍ¸¶Å© ÀÌ¹ÌÁö ³ôÀÌº¸´Ù ÀÛÀ¸¸é ¿öÅÍ¸¶Å© Ã³¸® ¾ÈÇÔ, return true;

        return true;
    }

    if ($sharpness < 0 || $sharpness > 100) $sharpness = 30;//$sharpness °¡ ÁöÁ¤µÈ ¹üÀ§ ÀÌ»óÀÇ ¼ýÀÚ¶ó¸é 30À¸·Î °­Á¦ Àç¼³Á¤

    if ($padding < 0 || $padding > $mark_w || $padding > $mark_h) $padding = 10;//$paddingÀÌ 0º¸´Ù ÀÛ°Å³ª ¿öÅÍ¸¶Å©ÀÇ ³Êºñ³ª ³ôÀÌº¸´Ù Å©¸é 10À¸·Î °­Á¦ Àç¼³Á¤

    if ($pos == 10) {//¿öÅÍ¸¶Å© ÀüÃ¼·Î ÂïÀ» °æ¿ìÀÇ Ã³¸®

        $w_max = $src_w - $padding;
        $h_max = $src_h - $padding;

        //x ÃàÀ¸·Î ¿öÅÍ¸¶Å©¸¦ ¸î¹ø ÂïÀ» °ÍÀÎÁö °è»ê, ÆÐµùÀ» ´õÇØ¼­ ³ª´®
        $x_max = ceil($w_max / ($mark_w + $padding));

        //y ÃàÀ¸·Î ¿öÅÍ¸¶Å©¸¦ ¸î¹ø ÂïÀ» °ÍÀÎÁö °è»ê
        $y_max = ceil($h_max / ($mark_h + $padding));

        //·çÇÁ¸¦ µ¹¸®¸é¼­ ¿öÅÍ¸¶Å©¸¦ ÂïÀ½
        for($x = 0; $x < $x_max; $x++){

            for($y = 0; $y < $y_max; $y++){

                //±âÁØÁ¡À» ±¸ÇÑ´Ù.
                $src_x = $x * ($mark_w + $padding) + $padding;
                $src_y = $y * ($mark_h + $padding) + $padding;

                $copy_w = $mark_w;
                $copy_h = $mark_h;

                if ($src_x + $mark_w > $w_max) $copy_w = $w_max - $src_x;
                if ($src_y + $mark_h > $h_max) $copy_h = $h_max - $src_y;

                if ($sharpness != 100) {//¼±¸íµµ°¡ 100 ÀÌ ¾Æ´Ò°æ¿ì¿¡´Â ¼±¸íµµ¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â imagecopymerge »ç¿ë

                    $result_watermark = imagecopymerge($src, $mark, $src_x, $src_y, 0, 0, $copy_w, $copy_h, $sharpness);
                }
                else {//¼±¸íµµ°¡ 100 ÀÏ °æ¿ì¿¡´Â Åõ¸íÀÌ¹ÌÁö¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â imagecopyresampled »ç¿ë

                    $result_watermark = imagecopyresampled($src , $mark , $src_x, $src_y, 0 , 0 , $copy_w, $copy_h , $copy_w, $copy_h);
                }

                if ($result_watermark === false) {

                    @imagedestroy($mark);

                    $GLOBALS['errormsg'] = "¿öÅÍ¸¶Å© Ã³¸®¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

                    return false;
                }
            }
        }
    }
    else {//¿öÅÍ¸¶Å©¸¦ ÇÏ³ª¸¸ ÂïÀ» °æ¿ì¿¡ÀÇ Ã³¸®

        //¿öÅÍ¸¶Å©ÀÇ º¹»çÇÒ ³Êºñ, ³ôÀÌ ±âº»°ª ÁöÁ¤
        $copy_w = $mark_w;
        $copy_h = $mark_h;

        switch($pos){

            case 1 : //»ó´Ü ¿ÞÂÊ

                $src_x = 0 + $padding;
                $src_y = 0 + $padding;

                break;

            case 2 : //»ó´Ü ¿À¸¥ÂÊ

                $src_x = $src_w - $mark_w - $padding;
                $src_y = 0 + $padding;

                break;

            case 3 : //ÇÏ´Ü ¿ÞÂÊ

                $src_x = 0 + $padding;
                $src_y = $src_h - $mark_h - $padding;

                break;

            case 4 : //ÇÏ´Ü ¿À¸¥ÂÊ

                $src_x = $src_w - $mark_w - $padding;
                $src_y = $src_h - $mark_h - $padding;

                break;

            case 5 : //Áß¾Ó

                $src_x = ceil(($src_w - $mark_w) / 2);
                $src_y = ceil(($src_h - $mark_h) / 2);

                break;

            default : // ±× ¹ÛÀÇ °ªÀº ÀüºÎ »ó´Ü ¿ÞÂÊ Ä¡ºÎ

                $src_x = 0 + $padding;
                $src_y = 0 + $padding;

        }

        if ($sharpness != 100) {//¼±¸íµµ°¡ 100 ÀÌ ¾Æ´Ò°æ¿ì¿¡´Â ¼±¸íµµ¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â imagecopymerge »ç¿ë

            $result_watermark = imagecopymerge($src, $mark, $src_x, $src_y, 0, 0, $copy_w, $copy_h, $sharpness);
        }
        else {//¼±¸íµµ°¡ 100 ÀÏ °æ¿ì¿¡´Â Åõ¸íÀÌ¹ÌÁö¸¦ »ç¿ëÇÒ¼ö ÀÖ´Â imagecopyresampled »ç¿ë

            $result_watermark = imagecopyresampled($src , $mark , $src_x, $src_y, 0 , 0 , $copy_w, $copy_h , $copy_w, $copy_h);
        }

        @imagedestroy($mark);

        if ($result_watermark === false) {

            $GLOBALS['errormsg'] = "¿öÅÍ¸¶Å© Ã³¸®¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

            return false;
        }
    }

    return true;
}



/*
ÀÌ¸§ : proc_unsharpmask

¿ëµµ : ÀÌ¹ÌÁöÀÇ »ö»ó »çÀÌÀÇ °æ°è¸¦ ¸íÈ®ÇÏ°Ô Ã³¸®ÇÏ¿© »çÁøÀÌ ¼±¸íÇÏ°Ô º¸ÀÌµµ·Ï ÇÑ´Ù.

¼º°ø½Ã ¸®ÅÏ°ª : true

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $src : ¿øº»ÀÇ ¸®¼Ò½º id
==> $src_w : ¿øº»ÀÇ ³Êºñ
==> $src_h : ¿øº»ÀÇ ³ôÀÌ
==> $amount : »þÇÂÀº ¸í°ú ¾ÏºÎÀÇ »ö»óÀÌ º¯È­µÇ¾î °æ°è¸éÀÌ °­Á¶µÇ¾î º¸ÀÌµµ·Ï ÇÏ´Â °ÍÀ¸·Î °æ°è¸é¿¡¼­ÀÇ ¸í¾Ï ´ëºñ¸¦ °­È­ÇÏ´Â Á¤µµ %
                    1 ¿¡¼­ 500 »çÀÌÀÇ Á¤¼ö¸¸ »ç¿ë°¡´É
==> $radius : °æ°è¸éÀÇ °­Á¶µÇ´Â ¹üÀ§¸¦ ¸»ÇÏ´Â °ÍÀ¸·Î ÀÛ°ÔÇÒ ¼ö·Ï °æ°è¸é¿¡¼­ »þÇÂÀ» À§ÇÑ ¸í¾ÏÀÌ °­Á¶ ¹üÀ§°¡ Á¼¾ÆÁü Áï, °­Á¶µÇ´Â °æ°è¸éÀÌ ¾ã¾ÆÁü.
                    0.5 ¿¡¼­ 50 »çÀÌÀÇ Á¤¼ö¿Í ¼Ò¼ö »ç¿ë°¡´É
==> $threshold : ¼³Á¤µÈ ¼öÁØ ÀÌ»óÀÇ ¸í¾ÏÂ÷°¡ ÀÖ´Â °æ°è¸¸ °­Á¶µÊ. ¿¹¸¦µé¾î 10À¸·Î ¼³Á¤ÇÒ °æ¿ì °æ°è¸éÀÇ ¸í¾ÏÂ÷°¡ 10 ÀÌ»ó ³ªÁö ¾Ê´Â °æ°è¸éÀº °­Á¶ÇÏÁö ¾ÊÀ½.
                        ³Ê¹« ³ô°ÔÇÒ °æ¿ì ´ëºÎºÐÀº »þÇÂµÇÁö ¾ÊÀ½. °¡Àå ³·°Ô ÇÒ °æ¿ì ¸ðµç °æ°è¸éÀÌ °­Á¶µÊ.
                        1 ¿¡¼­ 255 »çÀÌÀÇ Á¤¼ö¸¸ »ç¿ë°¡´É

http://vikjavev.no/computing/ump.php Âü°í

<?php

/*

New:
- In version 2.1 (February 26 2007) Tom Bishop has done some important speed enhancements.
- From version 2 (July 17 2006) the script uses the imageconvolution function in PHP
version >= 5.1, which improves the performance considerably.


Unsharp masking is a traditional darkroom technique that has proven very suitable for
digital imaging. The principle of unsharp masking is to create a blurred copy of the image
and compare it to the underlying original. The difference in colour values
between the two images is greatest for the pixels near sharp edges. When this
difference is subtracted from the original image, the edges will be
accentuated.

The Amount parameter simply says how much of the effect you want. 100 is 'normal'.
Radius is the radius of the blurring circle of the mask. 'Threshold' is the least
difference in colour values that is allowed between the original and the mask. In practice
this means that low-contrast areas of the picture are left unrendered whereas edges
are treated normally. This is good for pictures of e.g. skin or blue skies.

Any suggenstions for improvement of the algorithm, expecially regarding the speed
and the roundoff errors in the Gaussian blur process, are welcome.

*\/

function UnsharpMask($img, $amount, $radius, $threshold)    {

////////////////////////////////////////////////////////////////////////////////////////////////
////
////                  Unsharp Mask for PHP - version 2.1.1
////
////    Unsharp mask algorithm by Torstein H©ªnsi 2003-07.
////             thoensi_at_netcom_dot_no.
////               Please leave this notice.
////
///////////////////////////////////////////////////////////////////////////////////////////////



    // $img is an image that is already created within php using
    // imgcreatetruecolor. No url! $img must be a truecolor image.

    // Attempt to calibrate the parameters to Photoshop:
    if ($amount > 500)    $amount = 500;
    $amount = $amount * 0.016;
    if ($radius > 50)    $radius = 50;
    $radius = $radius * 2;
    if ($threshold > 255)    $threshold = 255;

    $radius = abs(round($radius));     // Only integers make sense.
    if ($radius == 0) {
        return $img; imagedestroy($img); break;        }
    $w = imagesx($img); $h = imagesy($img);
    $imgCanvas = imagecreatetruecolor($w, $h);
    $imgBlur = imagecreatetruecolor($w, $h);


    // Gaussian blur matrix:
    //
    //    1    2    1
    //    2    4    2
    //    1    2    1
    //
    //////////////////////////////////////////////////


    if (function_exists('imageconvolution')) { // PHP >= 5.1
            $matrix = array(
            array( 1, 2, 1 ),
            array( 2, 4, 2 ),
            array( 1, 2, 1 )
        );
        imagecopy ($imgBlur, $img, 0, 0, 0, 0, $w, $h);
        imageconvolution($imgBlur, $matrix, 16, 0);
    }
    else {

    // Move copies of the image around one pixel at the time and merge them with weight
    // according to the matrix. The same matrix is simply repeated for higher radii.
        for ($i = 0; $i < $radius; $i++)    {
            imagecopy ($imgBlur, $img, 0, 0, 1, 0, $w - 1, $h); // left
            imagecopymerge ($imgBlur, $img, 1, 0, 0, 0, $w, $h, 50); // right
            imagecopymerge ($imgBlur, $img, 0, 0, 0, 0, $w, $h, 50); // center
            imagecopy ($imgCanvas, $imgBlur, 0, 0, 0, 0, $w, $h);

            imagecopymerge ($imgBlur, $imgCanvas, 0, 0, 0, 1, $w, $h - 1, 33.33333 ); // up
            imagecopymerge ($imgBlur, $imgCanvas, 0, 1, 0, 0, $w, $h, 25); // down
        }
    }

    if($threshold>0){
        // Calculate the difference between the blurred pixels and the original
        // and set the pixels
        for ($x = 0; $x < $w-1; $x++)    { // each row
            for ($y = 0; $y < $h; $y++)    { // each pixel

                $rgbOrig = ImageColorAt($img, $x, $y);
                $rOrig = (($rgbOrig >> 16) & 0xFF);
                $gOrig = (($rgbOrig >> 8) & 0xFF);
                $bOrig = ($rgbOrig & 0xFF);

                $rgbBlur = ImageColorAt($imgBlur, $x, $y);

                $rBlur = (($rgbBlur >> 16) & 0xFF);
                $gBlur = (($rgbBlur >> 8) & 0xFF);
                $bBlur = ($rgbBlur & 0xFF);

                // When the masked pixels differ less from the original
                // than the threshold specifies, they are set to their original value.
                $rNew = (abs($rOrig - $rBlur) >= $threshold)
                    ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig))
                    : $rOrig;
                $gNew = (abs($gOrig - $gBlur) >= $threshold)
                    ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig))
                    : $gOrig;
                $bNew = (abs($bOrig - $bBlur) >= $threshold)
                    ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig))
                    : $bOrig;



                if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) {
                        $pixCol = ImageColorAllocate($img, $rNew, $gNew, $bNew);
                        ImageSetPixel($img, $x, $y, $pixCol);
                    }
            }
        }
    }
    else{
        for ($x = 0; $x < $w; $x++)    { // each row
            for ($y = 0; $y < $h; $y++)    { // each pixel
                $rgbOrig = ImageColorAt($img, $x, $y);
                $rOrig = (($rgbOrig >> 16) & 0xFF);
                $gOrig = (($rgbOrig >> 8) & 0xFF);
                $bOrig = ($rgbOrig & 0xFF);

                $rgbBlur = ImageColorAt($imgBlur, $x, $y);

                $rBlur = (($rgbBlur >> 16) & 0xFF);
                $gBlur = (($rgbBlur >> 8) & 0xFF);
                $bBlur = ($rgbBlur & 0xFF);

                $rNew = ($amount * ($rOrig - $rBlur)) + $rOrig;
                    if($rNew>255){$rNew=255;}
                    elseif($rNew<0){$rNew=0;}
                $gNew = ($amount * ($gOrig - $gBlur)) + $gOrig;
                    if($gNew>255){$gNew=255;}
                    elseif($gNew<0){$gNew=0;}
                $bNew = ($amount * ($bOrig - $bBlur)) + $bOrig;
                    if($bNew>255){$bNew=255;}
                    elseif($bNew<0){$bNew=0;}
                $rgbNew = ($rNew << 16) + ($gNew <<8) + $bNew;
                    ImageSetPixel($img, $x, $y, $rgbNew);
            }
        }
    }
    imagedestroy($imgCanvas);
    imagedestroy($imgBlur);

    return $img;

}
?>
*/

function proc_unsharpmask($src, $src_w, $src_h, $amount, $radius, $threshold) {

    if (empty($src))    {//¿øº»ÀÇ ¸®¼Ò½º id °¡ ºó°ªÀÏ °æ¿ì

        $GLOBALS['errormsg'] = '¿øº» ¸®¼Ò½º°¡ ¾ø½À´Ï´Ù.';

        return false;
    }

    //Á¤¼öÇüÀÌ ¾Æ´Ï¶ó¸é Á¤¼öÇüÀ¸·Î °­Á¦ Çüº¯È¯
    if (!is_int($src_w)) settype($src_w, 'int');
    if (!is_int($src_h)) settype($src_h, 'int');

    if ($src_w < 1 || $src_h < 1){//¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

        $GLOBALS['errormsg'] = "¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_w, $src_h)";

        return false;
    }

    if (!is_int($amount)) settype($amount, 'int');
    if ($amount > 500) $amount = 500;
    else if ($amount < 1) $amount = 1;
    $amount = $amount * 0.016;

    if (!is_int($radius) && !is_float($radius)) settype($radius, 'int');
    if ($radius > 50) $radius = 50;
    else if ($radius < 0.5) $radius = 0.5;
    $radius = $radius * 2;
    $radius = abs(round($radius));

    if (!is_int($threshold)) settype($threshold, 'int');
    if ($threshold > 255) $threshold = 255;
    else if ($threshold < 1) $threshold = 1;

    $src_canvas = $src;
    $src_canvas2 = $src;
    $src_blur = imagecreatetruecolor($src_w, $src_h);

    for ($i = 0; $i < $radius; $i++) {

        imagecopy($src_blur, $src_canvas, 0, 0, 1, 1, $src_w - 1, $src_h - 1); // up left
        imagecopymerge($src_blur, $src_canvas, 1, 1, 0, 0, $src_w, $src_h, 50); // down right
        imagecopymerge($src_blur, $src_canvas, 0, 1, 1, 0, $src_w - 1, $src_h, 33.33333); // down left
        imagecopymerge($src_blur, $src_canvas, 1, 0, 0, 1, $src_w, $src_h - 1, 25); // up right
        imagecopymerge($src_blur, $src_canvas, 0, 0, 1, 0, $src_w - 1, $src_h, 33.33333); // left
        imagecopymerge($src_blur, $src_canvas, 1, 0, 0, 0, $src_w, $src_h, 25); // right
        imagecopymerge($src_blur, $src_canvas, 0, 0, 0, 1, $src_w, $src_h - 1, 20 ); // up
        imagecopymerge($src_blur, $src_canvas, 0, 1, 0, 0, $src_w, $src_h, 16.666667); // down
        imagecopymerge($src_blur, $src_canvas, 0, 0, 0, 0, $src_w, $src_h, 50); // center
    }
    $src_canvas = $src_blur;

    for ($x = 0; $x < $src_w; $x++) { // each row

        for ($y = 0; $y < $src_h; $y++) { // each pixel

            $rgbOrig = imagecolorat($src_canvas2, $x, $y);
            $rOrig = (($rgbOrig >> 16) & 0xFF);
            $gOrig = (($rgbOrig >> 8) & 0xFF);
            $bOrig = ($rgbOrig & 0xFF);
            $rgbBlur = imagecolorat($src_canvas, $x, $y);
            $rBlur = (($rgbBlur >> 16) & 0xFF);
            $gBlur = (($rgbBlur >> 8) & 0xFF);
            $bBlur = ($rgbBlur & 0xFF);

            $rNew = (abs($rOrig - $rBlur) >= $threshold) ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig)) : $rOrig;
            $gNew = (abs($gOrig - $gBlur) >= $threshold) ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig)) : $gOrig;
            $bNew = (abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig;

            if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) {

                $pixCol = imagecolorallocate($src, $rNew, $gNew, $bNew);
                imagesetpixel($src, $x, $y, $pixCol);
            }
        }
    }

    @imagedestroy($src_blur);

    return true;
}



/*
ÀÌ¸§ : get_remote_image

¿ëµµ : ¿ÜºÎÀÇ ÀÌ¹ÌÁö¸¦ ÀÐ¾î¿È

¼º°ø½Ã ¸®ÅÏ°ª : ÀÌ¹ÌÁö ÆÄÀÏ ³»¿ë

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $url : ¿ÜºÎ ÀÌ¹ÌÁö ÁÖ¼Ò
==> $referer : ¸®ÆÛ·¯, »ý·« °¡´É, »ý·«½Ã ±âº» È£½ºÆ®°¡ µé¾î°¨
*/

function get_remote_image($url, $referer='') {

    $url_info = parse_url($url);

    $url_info['scheme'] = strtolower($url_info['scheme']);
    if ($url_info['scheme'] != 'http' && $url_info['scheme'] != 'https') {

        $GLOBALS['errormsg'] = "Á¤»óÀûÀÎ ÁÖ¼Ò°¡ ¾Æ´Õ´Ï´Ù.";

        return false;
    }

    if (empty($url_info['port'])) {

        if ($url_info['scheme'] == 'http') $url_info['port'] = '80';
        else $url_info['port'] = '443';
    }

    if (empty($url_info['path'])) $url_info['path'] = '/';
    if (!empty($url_info['query'])) $url_info['query'] = '?' . $url_info['query'];

    if (empty($referer)) {

        $referer = $url_info['scheme'] . '://' . $url_info['host'];
        if ($url_info['port'] != 80 && $url_info['port'] != 443) $referer .= ':' . $url_info['port'];
        $referer .= '/';
    }

    if ($url_info['scheme'] == 'http') $fp = fsockopen($url_info['host'], $url_info['port'], $errno, $errstr, 30);
    else $fp = fsockopen('ssl://' . $url_info['host'], $url_info['port'], $errno, $errstr, 30);

    if ($fp) {

        $put = "GET " . $url_info['path'] . $url_info['query'] . " HTTP/1.1\r\n";
        $put .= "Host: " . $url_info['host'] . "\r\n";
        $put .= "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2\r\n";
        $put .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
        $put .= "Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
        $put .= "Referer: " . $referer . "\r\n";
        $put .= "Connection: Close\r\n\r\n";

        fwrite($fp, $put);

        $header = $status = $return = '';
        while (!feof($fp)) {

            $header_ = fgets($fp, 128);
            $header .= $header_;

            if ($header_ == "\r\n") break;

            if (empty($status)) {

                preg_match("`^HTTP/[^\s]*\s+([0-9]+)\s`", $header_, $status);
                $status = $status[1];
            }
            else {

                if ($status == 302) {

                    preg_match("`^(Location:|URI:)\s+(.*)`", rtrim($header_), $redirect);
                    $redirect = $redirect[2];

                    if (!empty($redirect)) {

                        if(!preg_match("`://`", $redirect)) {

                            $redirect_ = $url_info['scheme'] . '://' . $url_info['host'];
                            if ($url_info['port'] != 80 && $url_info['port'] != 443) $redirect_ .= ':' . $url_info['port'];

                            if(!preg_match("`^/`", $redirect))
                                $redirect_ .= '/' . $redirect;
                            else
                                $redirect_ .= $redirect;

                            $redirect = $redirect_;
                        }

                        break;
                    }
                }
                else if ($status != 200){

                    break;
                }
            }
        }

        if ($status == 302 && !empty($redirect)) {

            fclose($fp);
            return get_remote_image($redirect, $referer);
        }
        else if ($status != 200) {

            fclose($fp);

            $GLOBALS['errormsg'] = "ÀÀ´äÀÌ 200 ÀÌ ¾Æ´Õ´Ï´Ù. " . $status;

            return false;
        }

        while (!feof($fp)) {

            $return .= fgets($fp, 128);
        }
        fclose($fp);
    }
    else  {

        $GLOBALS['errormsg'] = "¼ÒÄÏ Á¢¼Ó¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

        return false;
    }

    return $return;
}



/*
ÀÌ¸§ : create_thumbnail

¿ëµµ : ¿øº»À» Á¶°Ç¿¡ µû¶ó ¸®»çÀÌÁî, Å©·Ó, ¿öÅÍ¸¶Å©¸¦ Ã³¸®ÇÏ¿© ÆÄÀÏ·Î ÀúÀåÇÔ

¼º°ø½Ã ¸®ÅÏ°ª : true

½ÇÆÐ½Ã ¸®ÅÏ°ª : false

ÀÎÀÚ :
==> $path_src_file_or_url : ¿øº»ÆÄÀÏÀÇ Àý´ë°æ·Î ¶Ç´Â »ó´ë°æ·Î ¶Ç´Â ÁÖ¼Ò
==> $path_save_file : ½æ³×ÀÏÀ» ÀúÀåÇÒ Àý´ë°æ·Î ¶Ç´Â »ó´ë°æ·Î
==> $save_w : ¸¸µé ½æ³×ÀÏÀÇ ³Êºñ
==> $save_h : ¸¸µé ½æ³×ÀÏÀÇ ³ôÀÌ, »ý·« °¡´ÉÇÏ¸ç »ý·«½Ã ±âº»°ªÀº 0
==> $options : ÇÔ¼ö ³»ºÎ¿¡ Á¤ÀÇµÈ º¯¼öµéÀÇ °ªÀ» º¯°æÇÒ¶§ »ç¿ë, ¹è¿­ÇüÅÂ, »ý·«°¡´ÉÇÏ¸ç »ý·«½Ã ±âº»°ªÀº ºó¹è¿­(Array())
                                ==> $options['save_quality'] : ÆÄÀÏ·Î ÀúÀå½Ã ÀúÀåµÉ ÆÄÀÏÀÇ Ç°Áú, 100 ÀÌÇÏÀÇ ¾çÀÇ Á¤¼ö¸¸ »ç¿ë, gif´Â ÀÇ¹Ì ¾øÀ½
                                ==> $options['save_force'] : ÀÌ¹Ì µ¿ÀÏÇÑ °æ·Î¿¡ µ¿ÀÏÀÌ¸§ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÒ¶§ÀÇ Ã³¸® °áÁ¤
                                                                                                                        0 ÀÌ¸é false ¹ÝÈ¯, 1 ÀÌ¸é ´õÀÌ»ó ½ÇÇà¾ÈÇÏ°í true ¹ÝÈ¯, 2 ÀÌ¸é ±âÁ¸°Å´Â Áö¿ì°í »õ·Î ÀúÀå
                                ==> $options['unsharpmask_use'] : ¾ð¼¥¸¶½ºÅ© »ç¿ë ¿©ºÎ, 0 Àº »ç¿ë¾ÈÇÔ, 1Àº »ç¿ëÇÔ
                                ==> $options['unsharpmask_amount'] : »þÇÂÀº ¸í°ú ¾ÏºÎÀÇ »ö»óÀÌ º¯È­µÇ¾î °æ°è¸éÀÌ °­Á¶µÇ¾î º¸ÀÌµµ·Ï ÇÏ´Â °ÍÀ¸·Î °æ°è¸é¿¡¼­ÀÇ ¸í¾Ï ´ëºñ¸¦ °­È­ÇÏ´Â Á¤µµ %
                                                                                        1 ¿¡¼­ 500 »çÀÌÀÇ Á¤¼ö¸¸ »ç¿ë°¡´É
                                ==> $options['unsharpmask_radius'] : °æ°è¸éÀÇ °­Á¶µÇ´Â ¹üÀ§¸¦ ¸»ÇÏ´Â °ÍÀ¸·Î ÀÛ°ÔÇÒ ¼ö·Ï °æ°è¸é¿¡¼­ »þÇÂÀ» À§ÇÑ ¸í¾ÏÀÌ °­Á¶ ¹üÀ§°¡ Á¼¾ÆÁü
                                                                                    Áï, °­Á¶µÇ´Â °æ°è¸éÀÌ ¾ã¾ÆÁü.
                                                                                    0.5 ¿¡¼­ 50 »çÀÌÀÇ Á¤¼ö¿Í ¼Ò¼ö »ç¿ë°¡´É
                                ==> $options['unsharpmask_threshold'] : ¼³Á¤µÈ ¼öÁØ ÀÌ»óÀÇ ¸í¾ÏÂ÷°¡ ÀÖ´Â °æ°è¸¸ °­Á¶µÊ.
                                                                                        ¿¹¸¦µé¾î 10À¸·Î ¼³Á¤ÇÒ °æ¿ì °æ°è¸éÀÇ ¸í¾ÏÂ÷°¡ 10 ÀÌ»ó ³ªÁö ¾Ê´Â °æ°è¸éÀº °­Á¶ÇÏÁö ¾ÊÀ½.
                                                                                        ³Ê¹« ³ô°ÔÇÒ °æ¿ì ´ëºÎºÐÀº »þÇÂµÇÁö ¾ÊÀ½. °¡Àå ³·°Ô ÇÒ °æ¿ì ¸ðµç °æ°è¸éÀÌ °­Á¶µÊ.

                                ==> $options['crop_use'] : Å©·Ó »ç¿ë ¿©ºÎ, 0 Àº »ç¿ë¾ÈÇÔ, 1Àº »ç¿ëÇÔ
                                ==> $options['crop_pos_width'] : ³Êºñ ±âÁØÀ¸·Î Å©·ÓÇÒ¶§ ±âÁØºÎÀ§ °áÁ¤, 1Àº ¿ÞÂÊ, 2´Â °¡¿îµ¥, 3Àº ¿À¸¥ÂÊ
                                ==> $options['crop_pos_height'] : ³ôÀÌ ±âÁØÀ¸·Î Å©·ÓÇÒ¶§ ±âÁØºÎÀ§ °áÁ¤, 1Àº »ó´Ü, 2´Â Áß´Ü, 3Àº ÇÏ´Ü
                                ==> $options['watermark_path_file'] : ¿öÅÍ¸¶Å© ÀÌ¹ÌÁö ÆÄÀÏÀÇ Àý´ë°æ·Î ¶Ç´Â »ó´ë°æ·Î
                                ==> $options['watermark_pos'] : ¿öÅÍ¸¶Å© Âï´Â À§Ä¡ °áÁ¤, 1 Àº »ó´Ü ¿ÞÂÊ, 2´Â »ó´Ü ¿À¸¥ÂÊ, 3Àº ÇÏ´Ü ¿ÞÂÊ, 4´Â ÇÏ´Ü ¿À¸¥ÂÊ, 5´Â Áß¾Ó, 10 Àº ÀüÃ¼¿¡ ¹Ýº¹
                                ==> $options['watermark_sharpness'] : ¿öÅÍ¸¶Å©ÀÇ ¼±¸íµµ, 100 ÀÌÇÏÀÇ ¾çÀÇ Á¤¼ö¸¸ »ç¿ë
                                                                                                                                         ==> 100 ÀÏ°æ¿ì¿¡´Â Åõ¸íÀÌ¹ÌÁö »ç¿ë°¡´É
                                ==> $options['watermark_padding'] : ¿öÅÍ¸¶Å©ÀÇ ¿©¹é, 0ÀÌ»óÀÇ ¾çÀÇ Á¤¼ö, ÆÐµùÀÇ Å©±â´Â ¿öÅÍ¸¶Å©ÀÌ¹ÌÁöÀÇ ³Êºñ³ª ³ôÀÌº¸´Ù Å¬¼ö ¾øÀ½
*/

function create_thumbnail($path_src_file_or_url, $path_save_file, $save_w, $save_h=0, $options=Array()){

    //±âº»°ª ¼³Á¤
    $save_quality = 70;//ÀúÀå Ç°Áú : 70 %
    $save_force = 2;//ÀúÀåÇüÅÂ : ÆÄÀÏ µ¤¾î¾º¿ò

    $unsharpmask_use = 1;//¾ð¼¥¸¶½ºÅ© »ç¿ë¿©ºÎ
    $unsharpmask_amount = 100;
    $unsharpmask_radius = 1;
    $unsharpmask_threshold = 2;

    $crop_use = 0;//Å©·Ó »ç¿ë¿©ºÎ
    $crop_pos_width = 2;//³Êºñ ±âÁØ Å©·Ó½Ã Áß¾ÓÀ» ±âÁØ
    $crop_pos_height = 1;//³ôÀÌ ±âÁØ Å©·Ó½Ã »ó´ÜÀ» ±âÁØ

    $watermark_path_file = '';//¿öÅÍ¸¶Å©·Î »ç¿ëÇÒ ÆÄÀÏ °æ·Î : ¾øÀ½
    $watermark_pos = 4;//¿öÅÍ¸¶Å© Âï´Â À§Ä¡ : ÇÏ´Ü ¿À¸¥ÂÊ
    $watermark_sharpness = 30;//¿öÅÍ¸¶Å© ÀÌ¹ÌÁöÀÇ ¼±¸íµµ : 30 %
    $watermark_padding = 10;//¿øº»°ú ¿öÅÍ¸¶Å© »çÀÌÀÇ ¿©¹é : 10px

    //±âº»°ª Àç¼³Á¤
    if (!empty($options)) @extract($options);

    //ºÒÇÊ¿äÇÑ Ã³¸®¸¦ ¸·±â À§ÇØ ¸ÕÀú ÀúÀå°¡´ÉÇÑÁö ¿©ºÎ¿Í µ¿ÀÏÇÑ °æ·ÎÀÇ ÆÄÀÏ Á¸ÀçÀ¯¹« Ã¼Å©
    $result_writable = check_savable($path_save_file);
    if (empty($result_writable)) return false;

    if (is_file($path_save_file)) {

        if ($save_force == 1) {//»õ·Î ÀúÀåÇÏÁö ¾Ê°í true ¹ÝÈ¯

            return true;
        }
        else if ($save_force != 2){//0 ÀÌ°Å³ª Á¤ÇØÁöÁö ¾ÊÀº °ªÀÏ¶§ false¸¦ ¹ÝÈ¯

            $GLOBALS['errormsg'] = $path_save_file . 'Àº ÀÌ¹Ì °°Àº ÀÌ¸§ÀÇ ÆÄÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù.';

            return false;
        }
    }

    $path_src_file_or_url = trim($path_src_file_or_url);
    if (preg_match("`^http`i", $path_src_file_or_url)) {

        $remote_image_text = get_remote_image($path_src_file_or_url);
        if (empty($remote_image_text)){

            return false;
        }

        $path_temp_dir = sys_get_temp_dir();
        $path_src_file = tempnam($path_temp_dir, "RI");

        $fp = @fopen($path_src_file, "w");
        @fwrite($fp, $remote_image_text);
        @fclose($fp);

        //¿øº» ¸®¼Ò½º »ý¼º
        list($src, $src_w, $src_h) = get_image_resource_from_file($path_src_file);

        @unlink($path_src_file);
    }
    else {

        $path_src_file = $path_src_file_or_url;

        //¿øº» ¸®¼Ò½º »ý¼º
        list($src, $src_w, $src_h) = get_image_resource_from_file($path_src_file);
    }

    if (empty($src)) return false;

    //¸®»çÀÌÁî ¶Ç´Â Å©·Ó ¸®»çÀÌÁî
    if ($crop_use == 1) {//Å©·Ó ¸®»çÀÌÁî

        $dst = get_image_cropresize($src, $src_w, $src_h, $save_w, $save_h, $crop_pos_width, $crop_pos_height);
    }
    else {//¸®»çÀÌÁî

        $dst = get_image_resize($src, $src_w, $src_h, $save_w, $save_h);
    }

    @imagedestroy($src);
    if (empty($dst)) return false;

    $save_w = imagesx($dst);//»ý¼ºµÈ ½æ³×ÀÏ ¸®¼Ò½º¿¡¼­ ½ÇÁ¦ ³Êºñ¸¦ ±¸ÇÑ´Ù.
    $save_h = imagesy($dst);//»ý¼ºµÈ ½æ³×ÀÏ ¸®¼Ò½º¿¡¼­ ½ÇÁ¦ ³ôÀÌ¸¦ ±¸ÇÑ´Ù.

    //¾ð¼¥¸¶½ºÅ© Ã³¸®
    if ($unsharpmask_use == 1) {

        $result_unsharpmask = proc_unsharpmask($dst, $save_w, $save_h, $unsharpmask_amount, $unsharpmask_radius, $unsharpmask_threshold);

        if (empty($result_unsharpmask)) return false;
    }

    //¿öÅÍ¸¶Å© ÀÌ¹ÌÁö°¡ ÆÄÀÏÀÏ °æ¿ì, ¿öÅÍ¸¶Å© Ã³¸®
    if (!empty($watermark_path_file) && is_file($watermark_path_file)) {

        $result_watermark = proc_watermark($dst, $save_w, $save_h, $watermark_path_file, $watermark_pos, $watermark_sharpness, $watermark_padding);

        if (empty($result_watermark)) return false;
    }

    $result_save = save_image_from_resource($dst, $path_save_file, $save_quality, $save_force);

    @imagedestroy($dst);

    return $result_save;
}

?>