base64 Image resize class

ใช้กับงานที่เก็บ base64 string image ใน database
สามารถ resize รูปตาม width และ height ได้
ถ้าเกิด original image เป็น portrait หรือ landscape จะทำการ crop center ให้ด้วย แต่ผมโมให้รูปทรงออกมาเป็นลูกเต๋า
กรณี่ใส่ width หรือ height เป็นเพียงค่าเดียว ถ้าใส่เกินค่า width height ของ origninal จะปรับให้ได้รูป orginal ออกไป
แต่ถ้าใส่ไม่เกินและใส่ครบทั้ง width และ height จะทำการ crop center ให้จาก original

โหลดไปใช้ดู download

หรือ เสพจากตรงนี้ได้เลย

function resize_image($source_image, $width = 200, $height = 150, $quality = 70, $crop = true)
    {

        /* if( ! $image_data = getimagesize( $source_image ) )
        {
        return false;
        }

        switch( $image_data['mime'] )
        {
        case 'image/gif':
        $get_func = 'imagecreatefromgif';
        $suffix = ".gif";
        break;
        case 'image/jpeg';
        $get_func = 'imagecreatefromjpeg';
        $suffix = ".jpg";
        break;
        case 'image/png':
        $get_func = 'imagecreatefrompng';
        $suffix = ".png";
        break;
        }*/


        $img_original = $source_image;

        $img_original = imagecreatefromstring($img_original);

        $old_width = imagesx($img_original);
        $old_height = imagesy($img_original);
        $new_width = $width;
        $new_height = $height;
       
        $src_x = 0;
        $src_y = 0;
        $current_ratio = round( $old_width / $old_height, 2 );
        $desired_ratio_after = round( $width / $height, 2 );
        $desired_ratio_before = round( $height / $width, 2 );

        if( $old_width < $width )
        {
            $width = $old_width;
            $crop = false;
        }
        if( $old_height < $height )
        {
            $height = $old_height;
            $crop = false;
        }


        /**
        * If the crop option is left on, it will take an image and best fit it
        * so it will always come out the exact specified size.
        */

        if( $crop )
        {
            /**
            * create empty image of the specified size
            */

            $new_image = imagecreatetruecolor( $width, $height );

            /**
            * Landscape Image
            */

            if( $current_ratio > $desired_ratio_after )
            {
                $new_width = $old_width * $height / $old_height;
            }

            /**
            * Nearly square ratio image.
            */

            if( $current_ratio > $desired_ratio_before && $current_ratio < $desired_ratio_after )
            {
                if( $old_width > $old_height )
                {
                    $new_height = max( $width, $height );
                    $new_width = $old_width * $new_height / $old_height;
                }
                else
                {
                    $new_height = $old_height * $width / $old_width;
                }
            }

            /**
            * Portrait sized image
            */

            if( $current_ratio < $desired_ratio_before  )
            {
                $new_height = $old_height * $width / $old_width;
            }

            /**
            * Find out the ratio of the original photo to it's new, thumbnail-based size
            * for both the width and the height. It's used to find out where to crop.
            */

            $width_ratio = $old_width / $new_width;
            $height_ratio = $old_height / $new_height;

            /**
            * Calculate where to crop based on the center of the image
            */

            $src_x = floor( ( ( $new_width - $width ) / 2 ) * $width_ratio );
            $src_y = round( ( ( $new_height - $height ) / 2 ) * $height_ratio );
        }
        /**
        * Don't crop the image, just resize it proportionally
        */

        else
        {
            if( $old_width > $old_height )
            {
                $ratio = max( $old_width, $old_height ) / max( $width, $height );
            }else{
                $ratio = max( $old_width, $old_height ) / min( $width, $height );
            }

            $new_width = $old_width / $ratio;
            $new_height = $old_height / $ratio;

            $new_image = imagecreatetruecolor( $new_width, $new_height );
        }

        /**
        * Where all the real magic happens
        */


        imagecopyresampled( $new_image, $img_original, 0, 0, $src_x, $src_y, $new_width, $new_height, $old_width, $old_height );

        /**
        * Save it as a JPG File with our $destination_filename param.
        */

        //imagejpeg( $new_image, $destination_filename, $quality  );

        header('Content-Type: image/png');
        imagepng($new_image);

        /**
        * Destroy the evidence!
        */

        imagedestroy( $new_image );
        imagedestroy( $img_original );

        /**
        * Return true because it worked and we're happy. Let the dancing commence!
        */

        return true;
    }

เวลาจะใช้ก็

$string = base64_decode($string);//$string = base64 image string
resize_image($string,$width,$height);

มันก็จะพ่นรูปที่เป็น tag img ออกมาให้เลย

Related posts:

This entry was posted in php. Bookmark the permalink.