Imagecopyresampled Auto-Crop Image - PullRequest
       6

Imagecopyresampled Auto-Crop Image

0 голосов
/ 21 июля 2010

Я использую imagecopyresampled для создания миниатюр на основе определенной ширины и высоты. У меня проблема в том, что их рост уменьшается. Я хочу, чтобы все миниатюры были размером 140x84, и если их соотношение сторон не совпадает, верхняя и нижняя дополнительные части изображения обрезаются по центру.

Вот то, что я имею до сих пор, любые идеи будут с благодарностью.

// Create Thumbnail

        $imgsize = getimagesize($targetFile);
    switch(strtolower(substr($targetFile, -3))){
        case "jpg":
            $image = imagecreatefromjpeg($targetFile);    
        break;
        case "png":
            $image = imagecreatefrompng($targetFile);
        break;
        case "gif":
            $image = imagecreatefromgif($targetFile);
        break;
        default:
            exit;
        break;
    }

    $width = 140; //New width of image    
    $height = $imgsize[1]/$imgsize[0]*$width; //This maintains proportions

    $x_mid = $width/2;  //horizontal middle
    $y_mid = $height/2; //vertical middle

    $src_w = $imgsize[0];
    $src_h = $imgsize[1];


    $picture = imagecreatetruecolor($width, $height);
    imagealphablending($picture, false);
    imagesavealpha($picture, true);
    $bool = imagecopyresampled($picture, $image, 0, 0, 0, ($y_mid-(84/2)), $width, $height, $src_w, $src_h); 

    if($bool){
        switch(strtolower(substr($targetFile, -3))){
            case "jpg":
                header("Content-Type: image/jpeg");
                $bool2 = imagejpeg($picture,$file_dir."/thumbs/".$imageName,85);
            break;
            case "png":
                header("Content-Type: image/png");
                imagepng($picture,$file_dir."/thumbs/".$imageName);
            break;
            case "gif":
                header("Content-Type: image/gif");
                imagegif($picture,$file_dir."/thumbs/".$imageName);
            break;
        }
    }


    imagedestroy($picture);
    imagedestroy($image);

1 Ответ

0 голосов
/ 21 июля 2010

Вам нужно сначала потренироваться, если вы собираетесь изменить размер изображения в зависимости от его высоты или ширины.Обычно вы решаете это в зависимости от того, является ли ваше исходное изображение портретным или альбомным, а также от ориентации желаемого размера изображения.Затем вам нужно программно обработать другой край по вашему выбору.

Как только вы это сделаете, вы можете просто повторно сэмплировать свое исходное изображение в (0,0), и данные изображения с навеской будут усечены.

...