Skrypt generujący miniaturki obrazków

0

Witam serdecznie
mam taki skrypt:

 
resize_image("diaz_duze5.jpg", "m_diaz_duze5.jpg");
    
    function resize_image($source_image, $destination_filename, $width = 100, $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 = call_user_func( $get_func, $source_image );
    $old_width = $image_data[0];
    $old_height = $image_data[1];
    $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 || $old_height < $height )
    {
    /**
    * The desired image size is bigger than the original image.
    * Best not to do anything at all really.
    */
    return 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 ) );
    }
    /**
    * 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 );
     
    /**
    * Destroy the evidence!
    */
    imagedestroy( $new_image );
    imagedestroy( $img_original );
     
    /**
    * Return true because it worked and we're happy. Let the dancing commence!
    */
    return true;
    }

I wszystko mi działa prócz zmniejszania obrazka o takich wymiarach:

Ma ktoś może pomysł przez co się to źle generuje?

Z góry dziękuję za pomoc :)
Northwest

0

takie zgniecione ma generować? na pewno?

0

Ojej, przepraszam - złe linki podałem!! :(

Przepraszam za gafę :/

0

Cóż, nie chce mi się analizować tych matematycznych zapisów, najlepsza rada - zmień bibliotekę. Dostałeś nawet odp. w innym temacie, żeby użyć iMagick. Spróbuj, fajna biblioteka (jako rozszerzenie php). Jeżeli chcesz coś w czystym php, bazującym na bibliotece GD (którą masz domyślnie) - to przeszukaj phpclasses.org

1 użytkowników online, w tym zalogowanych: 0, gości: 1