<?php

//Æ¯Á¤ ÀÌ¹ÌÁöÆÄÀÏ(gif, jpg, png ¸¸ Áö¿ø)ÀÇ °æ·Î·Î ºÎÅÍ ÀÌ¹ÌÁö ¸®¼Ò½º¸¦ ¹Þ¾Æ¿Â´Ù. ¸®ÅÏ°ªÀº ¼º°ø½Ã¿¡´Â ÀÌ¹ÌÁö¸®¼Ò½º¿Í ÀÌ¹ÌÁö Á¤º¸°¡ ´ã±ä ¹è¿­À» ¹ÝÈ¯, ½ÇÆÐ½Ã¿¡´Â ºó ¹è¿­À» ¹ÝÈ¯
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]){

    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];//ÀÌ¹ÌÁö attr

    return $return;
  }
}



//ÀÎ¼ö·Î ¹Þ¾Æ¿Â ÀÌ¹ÌÁö ¸®¼Ò½º¿Í ÆÄÀÏ ÀúÀå °æ·Î¸¦ °¡Áö°í ÀÌ¹ÌÁö¸¦ ÀúÀåÇÑ´Ù. ¼º°ø½Ã true, ½ÇÆÐ½Ã false ¹ÝÈ¯
function save_image_from_resource ($im, $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_file($path_save_file) || is_dir($path_save_file)) {

    $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);
      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;
  }
}



//¿øº»ÀÇ ³Êºñ, ¿øº»ÀÇ ³ôÀÌ, ¸®»çÀÌÁî ³Êºñ³ª ³ôÀÌ, ±âÁØ°ªÀ» ¹Þ¾Æ ±âÁØ°ªÀ» Åä´ë·Î Á¤ºñÀ²ÀÇ °ªÀ» ±¸ÇÔ
//¼º°ø½Ã Á¤ºñÀ²ÀÇ °ªÀ» ¹ÝÈ¯, ½ÇÆÐ½Ã false¸¦ ¹ÝÈ¯
//±âÁØ°ªÀº width ³ª height, ±âÁØ°ªÀº »ý·« °¡´ÉÇÏ¸ç »ý·«½Ã ÀÚµ¿À¸·Î width°¡ µÈ´Ù.
function get_size_by_rule($src_w, $src_h, $dst_size, $rule='width'){

  if (!is_int($src_w) || $src_w < 1 || !is_int($src_h) || $src_h < 1){//¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

    $GLOBALS['errormsg'] = "¿øº»ÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_w, $src_h)";

    return false;
  }

  if (!is_int($dst_size) || $dst_size < 1){//¸®»çÀÌÁî µÉ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

    $GLOBALS['errormsg'] = "¸®»çÀÌÁîµÉ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_size)";

    return false;
  }

  if ($rule != 'height') {//±âÁØ°ªÀÌ ³ÊºñÀÏ °æ¿ì

    return ceil($dst_size / $src_w * $src_h);
  }
  else {//±âÁØ°ªÀÌ ³ôÀÌÀÏ °æ¿ì

    return ceil($dst_size / $src_h * $src_w);
  }
}



//¿øº»ÀÇ ³Êºñ³ª ³ôÀÌ, ½æ³×ÀÏ ³Êºñ, ½æ³×ÀÏ ³ôÀÌ, ±âÁØ°ªÀ» ¹Þ¾Æ ±âÁØ°ªÀ» Åä´ë·Î Á¤ºñÀ²ÀÇ °ªÀ» ±¸ÇÔ
//¼º°ø½Ã Á¤ºñÀ²ÀÇ °ªÀ» ¹ÝÈ¯, ½ÇÆÐ½Ã false¸¦ ¹ÝÈ¯
//±âÁØ°ªÀº width ³ª height, ±âÁØ°ªÀº »ý·« °¡´ÉÇÏ¸ç »ý·«½Ã ÀÚµ¿À¸·Î width°¡ µÈ´Ù.
function get_bigsize_by_rule($src_size, $dst_w, $dst_h, $rule='width'){

  if (!is_int($src_size) || $src_size < 1){//¿øº»ÀÇ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

    $GLOBALS['errormsg'] = "¿øº»ÀÇ »çÀÌÁî°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($src_size)";

    return false;
  }

  if (!is_int($dst_w) || $dst_w < 1 || !is_int($dst_h) || $dst_h < 1){//½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ°¡ µÑÁß¿¡ ÇÏ³ª¶óµµ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Ò°æ¿ì

    $GLOBALS['errormsg'] = "½æ³×ÀÏÀÇ ³Êºñ¿Í ³ôÀÌ°¡ 0º¸´Ù Å« Á¤¼ö°¡ ¾Æ´Õ´Ï´Ù. ($dst_w, $dst_h)";

    return false;
  }

  if ($rule != 'height') {//±âÁØ°ªÀÌ ³ÊºñÀÏ °æ¿ì

    return ceil($src_size / $dst_w * $dst_h);
  }
  else {//±âÁØ°ªÀÌ ³ôÀÌÀÏ °æ¿ì

    return ceil($src_size / $dst_h * $dst_w);
  }
}



//¿øº»ÀÇ ¸®¼Ò½º, ¿øº»ÀÇ ³Êºñ, ¿øº»ÀÇ ³ôÀÌ, ¸®»çÀÌÁî ³Êºñ, ³ôÀÌ¸¦ ¹Þ¾Æ ÀÌ¹ÌÁö ¸®»çÀÌÁî Ã³¸®
//¼º°ø½Ã ¸®»çÀÌÁîµÈ ÀÌ¹ÌÁöÀÇ ¸®¼Ò½º¸¦ ¹ÝÈ¯, ½ÇÆÐ½Ã false¸¦ ¹ÝÈ¯
//$dst_h ´Â »ý·«°¡´É, »ý·«½Ã ³Êºñ ±âÁØ Á¤ºñÀ²·Î ¸®»çÀÌÁî µÊ
//³Êºñ¸¦ ±âÁØÀ¸·Î Á¤ºñÀ² »ý¼º½Ã´Â get_image_resize($src, $src_w, $src_h, $dst_w) À¸·Î »ç¿ë
//³ôÀÌ¸¦ ±âÁØÀ¸·Î Á¤ºñÀ² »ý¼º½Ã´Â get_image_resize($src, $src_w, $src_h, 0, $dst_h) À¸·Î »ç¿ë
//ÁöÁ¤µÈ Å©±â·Î °­Á¦ »ý¼º½Ã¿¡´Â get_image_resize($src, $src_w, $src_h, $dst_w, $dst_h) À¸·Î »ç¿ë
function get_image_resize($src, $src_w, $src_h, $dst_w, $dst_h=0){

  if (empty($src))  {//¿øº»ÀÇ ¸®¼Ò½º°¡ ºó°ªÀÏ °æ¿ì

    $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 = @imagecreatetruecolor ($dst_w , $dst_h);//¸¸µå¾îÁú $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;
}



//¿øº»ÀÇ ¸®¼Ò½º, ¿øº»ÀÇ ³Êºñ, ¿øº»ÀÇ ³ôÀÌ, Å©·Ó¸®»çÀÌÁî ³Êºñ, ³ôÀÌ¸¦ ¹Þ¾Æ ÀÌ¹ÌÁö Å©·Ó ÈÄ ¸®»çÀÌÁî Ã³¸®
//¼º°ø½Ã ¸®»çÀÌÁîµÈ ÀÌ¹ÌÁöÀÇ ¸®¼Ò½º¸¦ ¹ÝÈ¯, ½ÇÆÐ½Ã false¸¦ ¹ÝÈ¯
function get_image_cropresize($src, $src_w, $src_h, $dst_w, $dst_h=0){

  if (empty($src))  {//¿øº»ÀÇ ¸®¼Ò½º°¡ ºó°ªÀÏ °æ¿ì

    $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');



  if ($dst_h == $s_h) {//³ôÀÌ°¡ °°À» °æ¿ì, Áï Á¤ºñÀ² ¸®»çÀÌÁîÀÏ°æ¿ì

    $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;
    }
  }
  else if ($dst_h < $s_h) {//ÁöÁ¤µÈ ³ôÀÌ°¡ Á¤ºñÀ² ³ôÀÌ º¸´Ù ÀÛÀ»°æ¿ì, ³ôÀÌ¸¦ ±âÁØÀ¸·Î °¡¿îµ¥¸¦ Å©·Ó

    //½æ³×ÀÏÀÇ ³ôÀÌ¸¦ ±âÁØÀ¸·Î Á¤ºñÀ²ÀÇ ¿øº» ³ôÀÌ¸¦ ±¸ÇÑ´Ù.
    $src_nh = get_bigsize_by_rule($src_w, $dst_w, $dst_h, 'width');

    $src_x = 0;
    $src_y = ceil(($src_h - $src_nh) / 2);

    $result_resize = imagecopyresampled ($dst , $src , 0 , 0 , $src_x , $src_y , $dst_w , $dst_h , $src_w , $src_nh );
    if ($result_resize === false) {

      $GLOBALS['errormsg'] = "$dst_w , $dst_h Å©±â·Î ¸®»çÀÌÁî¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

      return false;
    }
  }
  else {//ÁöÁ¤µÈ ³ôÀÌ°¡ Á¤ºñÀ² ³ôÀÌ º¸´Ù Å«°æ¿ì, ³Êºñ¸¦ ±âÁØÀ¸·Î °¡¿îµ¥¸¦ Å©·Ó

    //½æ³×ÀÏÀÇ ³Êºñ¸¦ ±âÁØÀ¸·Î Á¤ºñÀ²ÀÇ ¿øº» ³Êºñ¸¦ ±¸ÇÑ´Ù.
    $src_nw = get_bigsize_by_rule($src_h, $dst_w, $dst_h, 'height');

    $src_x = ceil(($src_w - $src_nw) / 2);
    $src_y = 0;

    $result_resize = imagecopyresampled ($dst , $src , 0 , 0 , $src_x , $src_y , $dst_w , $dst_h , $src_nw , $src_h );
    if ($result_resize === false) {

      $GLOBALS['errormsg'] = "$dst_w , $dst_h Å©±â·Î ¸®»çÀÌÁî¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.";

      return false;
    }
  }

  return $dst;
}

?>