3

私はphpスクリプトを使用して、画像をアップロードしてサイズを変更しています。非常に簡単です:

if($_SERVER["REQUEST_METHOD"] == "POST") {
    $image = $_FILES["image_upload"];
    $uploadedfile = $image['tmp_name'];

    if ($image) {
        $filename = stripslashes($_FILES['image_upload']['name']);
        $extension = getExtension($filename);
        $extension = strtolower($extension);
        if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) {
            $error_txt = 'Immagine incoretta';
            $errors=1;
        } else {
            $size=filesize($uploadedfile);
            if ($size > MAX_SIZE*1024) {
                $error_txt = "Immagine troppo grande";
                $errors=1;
            }
            if($extension=="jpg" || $extension=="jpeg" ) {
                $uploadedfile = $uploadedfile;
                $src = imagecreatefromjpeg($uploadedfile);
            } else if($extension=="png") {
                $uploadedfile = $uploadedfile;
                $src = imagecreatefrompng($uploadedfile);
            } else {
                $src = imagecreatefromgif($uploadedfile);
            }

            list($width,$height)=getimagesize($uploadedfile);

            $newwidth=500;
            $newheight=375;
            $tmp=imagecreatetruecolor($newwidth,$newheight);



            imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);


            $filename = "images/". generateRandomString(5) . $image['name'];

            imagejpeg($tmp,$filename,100);

            imagedestroy($src);
            imagedestroy($tmp);
        }
    }

私はもう少し先に進みたいと思っています。今はプロポーションに関係なく画像のサイズを変更しているだけです。元のプロポーションを失うことなく、固定された高さにサイズを変更したいと考えています。もちろん、これはトリミングによって達成されます。 +元の画像のサイズ変更。

実際のimagecreatetruecolorおよびimagecopyresampled関数を使用してこれを行う方法がわかりません。php マニュアルを見るのは簡単ではないようです。

私のコードに統合しようとしている非常に優れたライブラリがあります。使用方法はmysite.com/lib/timthumb.php?src=castle1.jpg&h=180&w=120と同じくらい簡単ですが、それを実際のコードと統合する方法がわかりませんコード。

それで、あなたは何を提案しますか?

4

1 に答える 1

2

以下のコードに誤字脱字等がありましたらご容赦ください。私はそれをテストしていません。ここで行ったのは、高さと幅のどちらが長すぎるかを計算することです。次に、ソースの寸法を調整して、最終的な画像の寸法に合わせます。また、トリミングした画像が中央になるように、縮小した辺の中央を調整します。

    $newwidth  = 500;
    $newheight = 375;
    $tmp       = imagecreatetruecolor($newwidth, $newheight);

    $widthProportion  = $width / $newwidth;
    $heightProportion = $height / $newheight;

    if ($widthProportion > $heightProportion) {
        // width proportion is greater than height proportion
        // figure out adjustment we need to make to width
        $widthAdjustment = ($width * ($widthProportion - $heightProportion));

        // Shrink width to proper proportion
        $width = $width - $widthAdjustment;

        $x = 0; // No adjusting height position
        $y = $y + ($widthAdjustment / 2); // Center the adjustment
    } else {
        // height proportion is greater than width proportion
        // figure out adjustment we need to make to width
        $heightAdjustment = ($height * ($heightProportion - $widthProportion));

        // Shrink height to proper proportion
        $height = $height - $heightAdjustment;

        $x = $x + ($heightAdjustment / 2); // Center the ajustment
        $y = 0; // No adjusting width position
    }

    imagecopyresampled($tmp, $src, 0, 0, $x, $y, $newwidth, $newheight, $width, $height);

したがって、基本的に $width 変数と $height 変数を使用して、必要な画像の量を指定します (トリミング)。$x, $y を使用して、画像を切り取る場所を指定しています。残りは、完全な新しい画像に合わせて標準のサイズ変更を行うだけです。

それが役立つことを願っています!

于 2013-03-22T22:23:09.340 に答える