2010-04-19 3 views
0

저는 PHP가 처음인데 이미지 크기를 조정하는 스크립트를 작성하고 있습니다.PHP : 이미지의 자른 축소판 만들기 문제가 있습니다.

먼저 업로드 한 이미지의 크기가 업로드 한 파일의 방향 (세로/가로)에 따라 * 높이로 800width로 조정됩니다.

그런 다음 스크립트는 해당 이미지의 미리보기 이미지를 작성합니다. 미리보기 이미지의 너비는 117 º에서 175 º이어야합니다. 이는 사진을 찍는 카메라의 표준 jpeg 이미지와 동일한 비율을 가지므로 원본 파일이 가로 인 경우 축소판 버전의 이미지를 잘라낼 필요가 없습니다. 그러나 업로드 된 이미지가 세로 방향 인 경우 175x117 픽셀의 미리보기 이미지를 얻을 수 있도록 이미지를 자르지 않아야합니다. 수확시 이미지의 중심을 유지해야합니다 (왼쪽 위, 아래 오른쪽 등).

나는이 일을하는 데 엄청난 어려움을 겪고 있으며, 누군가가 먹고 싶다면 영원히 감사 할 것입니다. 내 코드를 살펴보고 나를 도울 시간! : D

이 사이트는 hybridtempo.net에서 찾을 수 있습니다. 데이터베이스에 무작위로 데이터를 입력해야하고 아이디어가 없어지는 것을 알 수 있습니다.

'imagecopyresize', 'imagecreatetruecolour', 'imagecreatefromjpeg'등의 기능을 사용하기 시작하면 모든 것이 제대로 작동하는 것처럼 보입니다.

모든 도움을 주셔서 대단히 감사드립니다. :)

속히 :

<?php 


//IMAGE RESIZE FUNCTION CODE BEGIN - CODE FOUND AND APPROPRIATED FROM http://github.com/maxim/smart_resize_image/ 

function smart_resize_image($file, 
           $width    = 0, 
           $height    = 0, 
           $proportional  = false, 
           $output    = 'file', 
           $delete_original = true, 
           $use_linux_commands = false) { 

    if ($height <= 0 && $width <= 0) return false; 

    # Setting defaults and meta 
    $info       = getimagesize($file); 
    $image      = ''; 
    $final_width     = 0; 
    $final_height     = 0; 
    list($width_old, $height_old) = $info; 

    # Calculating proportionality 
    if ($proportional) { 
     if  ($width == 0) $factor = $height/$height_old; 
     elseif ($height == 0) $factor = $width/$width_old; 
     else     $factor = min($width/$width_old, $height/$height_old); 

     $final_width = round($width_old * $factor); 
     $final_height = round($height_old * $factor); 
    } 
    else { 
     $final_width = ($width <= 0) ? $width_old : $width; 
     $final_height = ($height <= 0) ? $height_old : $height; 
    } 

    # Loading image to memory according to type 
    switch ($info[2]) { 
     case IMAGETYPE_GIF: $image = imagecreatefromgif($file); break; 
     case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($file); break; 
     case IMAGETYPE_PNG: $image = imagecreatefrompng($file); break; 
     default: return false; 
    } 


    # This is the resizing/resampling/transparency-preserving magic 
    $image_resized = imagecreatetruecolor($final_width, $final_height); 
    if (($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG)) { 
     $transparency = imagecolortransparent($image); 

     if ($transparency >= 0) { 
     $transparent_color = imagecolorsforindex($image, $trnprt_indx); 
     $transparency  = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']); 
     imagefill($image_resized, 0, 0, $transparency); 
     imagecolortransparent($image_resized, $transparency); 
     } 
     elseif ($info[2] == IMAGETYPE_PNG) { 
     imagealphablending($image_resized, false); 
     $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127); 
     imagefill($image_resized, 0, 0, $color); 
     imagesavealpha($image_resized, true); 
     } 
    } 
    imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old); 

    # Taking care of original, if needed 
    if ($delete_original) { 
     if ($use_linux_commands) exec('rm '.$file); 
     else @unlink($file); 
    } 

    # Preparing a method of providing result 
    switch (strtolower($output)) { 
     case 'browser': 
     $mime = image_type_to_mime_type($info[2]); 
     header("Content-type: $mime"); 
     $output = NULL; 
     break; 
     case 'file': 
     $output = $file; 
     break; 
     case 'return': 
     return $image_resized; 
     break; 
     default: 
     break; 
    } 

    # Writing image according to type to the output destination 
    switch ($info[2]) { 
     case IMAGETYPE_GIF: imagegif($image_resized, $output); break; 
     case IMAGETYPE_JPEG: imagejpeg($image_resized, $output); break; 
     case IMAGETYPE_PNG: imagepng($image_resized, $output); break; 
     default: return false; 
    } 

    return true; 
    } 


//IMAGE RESIZE FUNCTION CODE END. 



/******** IMAGE UPLOAD SCRIPT BEGIN ********/ 

//IF IMAGE IS JPEG OR PNG 
if (($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
{ 
    //IF THERE IS AN ERROR, DISPLAY THE MESSAGE 
    if ($_FILES["file"]["error"] > 0) 
    { 
     echo "<p>Error: " . $_FILES["file"]["error"] . " 
     <br /> 
     Redirecting... 
     <br /> 
     <br /> 
     If you are not automatically redirected after 3 seconds, <b><a href='addproduct_uploadimage.php'>click here to try another upload.</a></p>"; 

     //REDIRECT 
     echo "<META HTTP-EQUIV='refresh' CONTENT='3;URL=addproduct_uploadimage.php'>"; 
    } 

    //OTHERWISE, PROCEED 
    else 
    { 
     //EXPLAIN CURRENT PROCESS TO USER 
     echo "<p>File Uploaded: " . $_FILES["file"]["name"] . "<br />"; 
     echo "Size: " . ($_FILES["file"]["size"]/1024) . " Kb<br />"; 
     echo "Temporary file stored in: " . $_FILES["file"]["tmp_name"] . "</p><br /><br />"; 

     //ABSOLUTE PATH OF FILE 
     $img_url = "/home/space_/hybridtempo.net/images/uploads/" . $_FILES["file"]["name"]; 

     //IF FILE ALREADY EXISTS, TELL THE USER IT ALREADY EXISTS, REDIRECT TO TRY AGAIN 
     if (file_exists($img_url)) 
     { 
      echo "<p>" . $_FILES["file"]["name"] . " already exists. Redirecting... 
      <br /> 
      <br /> 
      If you are not automatically redirected after 3 seconds, <b><a href='addproduct_uploadimage.php'>click here to try another upload.</a></p>"; 

      echo "<META HTTP-EQUIV='refresh' CONTENT='3;URL=addproduct_uploadimage.php'>"; 
     } 

     //IF FILE DOES NOT ALREADY EXIST, PROCEED... 
     else 
     { 
      //POSITION - FROM THE ABSOLUTE ROOT OF THE CLIENT'S WEBSPACE - FOR THE FILE TO GET STORED 
      $img_url    = "/home/space_/hybridtempo.net/images/uploads/" . $_FILES["file"]["name"];      
      $thumb_url    = "/home/space_/hybridtempo.net/images/uploads/thumbnails/" . $_FILES["file"]["name"];  

      //MOVE TEMPORARY FILE TO WHERE IT IT SHOULD BE STORED 
      move_uploaded_file($_FILES["file"]["tmp_name"], $img_url); 

      // FIND IMAGE WIDTH AND HEIGHT TO DETRMINE RESIZE DIMENSIONS 
      list($width, $height) = getimagesize($img_url); 

      // RESIZE BASED ON PORTRAIT OR LANDSCAPE ORIENTATION OF IMAGE 
      if ($width > $height) 
      { 
       smart_resize_image($img_url, 
             $width    = 800, 
             $height    = 0, 
             $proportional  = true, 
             $output    = 'file', 
             $delete_original = true, 
             $use_linux_commands = false); 


        // STORE URL OF IMAGE IN 'picture' TABLE in 'shop' DATABASE 
        mysql_connect("**************","***********","*****"); 
        mysql_select_db("hybridtempo_shop"); 
        $prod_id = $_SESSION["prod_id"]; 
        $result = mysql_query ("INSERT INTO picture (prod_id,picture_url,picture_id) VALUES ('$prod_id', '$img_url', 'NULL')"); 
        mysql_close();     


       smart_resize_image($img_url, 
             $width    = 175, 
             $height    = 117, 
             $proportional  = false, 
             $output    = $thumb_url, 
             $delete_original = false, 
             $use_linux_commands = false); 


        // STORE URL OF IMAGE IN 'picture' TABLE in 'shop' DATABASE 
        mysql_connect("******************","****************","***********"); 
        mysql_select_db("hybridtempo_shop"); 
        $prod_id = $_SESSION["prod_id"]; 
        $result = mysql_query ("INSERT INTO picture (prod_id,thumbnail_url,picture_id) VALUES ('$prod_id', '$thumb_url', 'NULL')"); 
        mysql_close(); 
      }       

      else 
      { 
       smart_resize_image($img_url, 
             $width    = 0, 
             $height    = 700, 
             $proportional  = true, 
             $output    = 'file', 
             $delete_original = true, 
             $use_linux_commands = false); 


        // STORE URL OF IMAGE IN 'picture' TABLE in 'shop' DATABASE 
        mysql_connect("*********","**********","**********"); 
        mysql_select_db("hybridtempo_shop"); 
        $prod_id = $_SESSION["prod_id"]; 
        $result = mysql_query ("INSERT INTO picture (prod_id,picture_url,picture_id) VALUES ('$prod_id', '$img_url', 'NULL')"); 
        mysql_close();      


        $wrongsize_thumb_url = $_FILES["file"]["name"]; 

        smart_resize_image ($img_url, 
             $width    = 175, 
             $height    = 0, 
             $proportional  = true, 
             $output    = $wrongsize_thumb_url, 
             $delete_original = false, 
             $use_linux_commands = false 
             ); 


        //FUNCTION FROM WIDELY SUPPORTED GD LIBRARY, BUNDLED WITH PHP 

        $wrongsize_thumb_url = $_FILES["file"]["name"]; 

        //CROP PORTRAIT THUMBNAILS, AS THEY ARE TOO TALL. 


        $image_for_resize = ImageCreateFromJpeg($wrongsize_thumb_url); 

        $temporary_image = imagecreatetruecolor(117,175); 

        imagecopyresized (
             $temporary_image, $image_for_resize, 
             $destination_x_coordinate  = 0, 
             $destination_y_coordinate  = 0, 
             $source_x_coordinate   = 0, 
             $source_y_coordinate   = 58, 
             $destination_width    = 175, 
             $destination_height    = 117, 
             $source_width     = 175, 
             $source_height     = 261 
             ); 

        imagejpeg  ($image_for_resize, 'thumbnail_' . $_FILES["file"]["name"]); 

        imagedestroy ($wrongsize_thumb_url); 


        // STORE URL OF IMAGE IN 'picture' TABLE in 'shop' DATABASE 
        mysql_connect("************","*************","***************"); 
        mysql_select_db("hybridtempo_shop"); 
        $prod_id = $_SESSION["prod_id"]; 
        $result = mysql_query ("INSERT INTO picture (prod_id,thumbnail_url,picture_id) VALUES ('$prod_id', '$thumb_url', 'NULL')"); 
        mysql_close(); 
      } 


      //EXPLAIN WHERE IMAGE AND THUMBNAIL WERE STORED AND INFORM OF IMINENT REDIRECT 
      echo "<p>Image stored in: " . $_img_url; 
      echo "<br />"; 
      echo "<p>Thumbnail stored in: " . $thumb_url; 
      echo "<br /><br />"; 

      // UNSET PROD_ID VARIABLE TO PREVENT MIXUPS IF ADDING ANOTHER PRODUCT 
      unset($_SESSION['prod_id']); 

      //REDIRECTION MESSAGE 
      echo "If you are not automatically redirected after 5 seconds, <b><a href='index.php'>click here to return to the homepage.</a></p>"; 

      //REDIRECT TO HOMEPAGE 
      //echo "<META HTTP-EQUIV='refresh' CONTENT='5;URL=index.php'>"; 


     } 
    } 
} 
else 
    { 
    echo "<p>Error: The file needs to be an image. Redirecting... 
    <br /> 
    <br /> 
    If you are not automatically redirected after 3 seconds, <b><a href='addproduct_uploadimage.php'>click here to try another upload.</a></b></p>"; 
    //REDIRECT 
    echo "<META HTTP-EQUIV='refresh' CONTENT='3;URL=addproduct_uploadimage.php'>"; 
    } 
?> 







     </center> 

     </div>  

     <div class="nav_bar"> 
    <p><i> ~<a href="index.php"> home </a>~ 
      <a href="http://blog.hybridtempo.net/"> blog </a>~ 
      <a href="shop.php"> shop </a>~ 
      <a href="#"> sourcing </a>~          <!-- Navigation bar contents. !--> 
      <a href="#"> links </a>~ 
      <a href="#"> about </a>~ 
      <a href="#"> contact </a>~ </i></p> 

     </div> 

    </div> 


    <div id="bg"> 
     <div> 
      <table cellspacing="0" cellpadding="0"> 
       <tr> 
        <td> 
         <img src="images/bg.jpg" alt=""/>      <!-- Background image. Must match thumbnail on homepage navigation grid !--> 
        </td> 
       </tr> 
      </table> 
     </div> 
</div> 



</body> 

</html> 
+0

에 오신 것을 환영합니다 SO에 : 그것은 PHP에서 이미지 크기를 조정하기위한 매우 간단한 스크립트를 보여줍니다. 당신은 정말로 당신에게 질문하는 것이 아닙니다. 어디서 붙어 있니? 그것이해야하는대로 작동하지 않는 것은 무엇입니까? –

+1

ImageMagick http://www.imagemagick.org/Usage/thumbnails/를 사용하면 더 나은 행운을 누릴 수 있습니다. –

답변