PHP: creating cropped image thumbnails, problems

I am new to PHP and I am writing a script that will resize images.

First, the downloaded image changes to 800 * in height, depending on the orientation of the downloaded file (portrait / landscape).

Then the script is designed to create a thumbnail of this image. The thumbnail should be 175 Width at 117height. This corresponds to the same proportion as the standard jpeg image from cameras that take images, so there is no need to crop the image for a miniature version if the source file is landscape. However, when the uploaded image is a portrait orientation, I have to crop the image to get a 175x117px thumbnail. When cropping, I need to maintain the center of the image (unlike the upper left, lower right, etc.).

I had serious problems with this, and I really would be infinitely grateful if someone did not mind to take the time to look through my code and help me !: D

The site can be found at hybridtempo.net. Beware that there is pretty random shit in the database where I had to enter random data and run out of ideas, lol.

Everything seems to be working fine, so far very close to the bottom, where I start using the functions imagecopyresize, imagecreatetruecolore, imagecreatefromjpeg, etc.

Thanks so much for any input. :)

Without further ado:

<?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 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
source share
1 answer

See example 1 : at the following URL. It shows a very simple script for resizing images in PHP:

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

+1
source

Source: https://habr.com/ru/post/1755385/


All Articles