PHP: Görüntülerin kırpılmış küçük resimlerini, sorunları oluşturma

1 Cevap php

Ben PHP için oldukça yeni ve ben görüntüleri yeniden boyutlandırmak bir senaryo yazıyorum.

İlk yüklenmiş bir resim yüklenen dosyanın (dikey / yatay) yönüne bağlı olarak, * yükseklik 800width yeniden boyutlandırılır.

Komut daha sonra bu görüntünün bir minyatürünü oluşturmak içindir. Küçük 117height tarafından 175width gerekir. Bu fotoğraf çekmek kameralar standart bir jpeg görüntü olarak aynı oranda sahiptir, böylece orijinal dosya manzara ise bir küçük versiyonu için görüntüyü kırpmak için gerek yoktur. Yüklenen resim portre yönelim Ancak, ben 175x117px bir minyatürünü elde edebilmek için görüntüyü kırpmak gerekir. Kırparken (sol üst, sağ alt, vb aksine), ben görüntünün merkezini korumak gerekir

Ben büyük sorun bu yapıyorum yaşıyorum ve kimse benim kodu bakmak ve yardım etmek beni dışarı zaman ayırdığınız sakıncası olsaydı ben gerçekten sonsuza dek minnettar olacaktır! : D

Site hybridtempo.net bulunabilir. Lol, ben rasgele veri girmek zorunda kaldı ve fikir bitti veritabanında bazı oldukça rasgele bok olduğunu dikkat edin.

Her şey çok ben 'imagecopyresize', 'imagecreatetruecolour', 'imagecreatefromjpeg', vb işlevleri kullanmaya başlar altına yakın kadar iyi iş gibi görünüyor.

Herhangi bir katkı için çok teşekkür ederiz. :)

Lafı daha fazla uzatmadan:

<?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>

1 Cevap

example 1 bak: URL aşağıdaki at. Bu PHP yeniden boyutlandırma için çok basit bir komut dosyasını gösterir:

http://us.php.net/manual/en/function.imagecopyresized.php