0

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);
4

1 に答える 1

0

高さまたは幅に基づいて画像のサイズを変更する場合は、最初に解決する必要があります。通常、元の画像が縦か横か、および目的の画像サイズの向きに応じて、これを解決します。次に、選択したものからプログラムで他のエッジを解決する必要があります。

取得したら、元の画像を (0,0) で単純にリサンプリングすると、オーバーハングした画像データが切り捨てられます。

于 2010-07-21T08:32:24.143 に答える