1

すべての画像が中央に配置されている間、515px X 343px のスペースに収まる必要があるギャラリー ツールがあります。私はプロポーションを維持し、そのスペースの画像を中央に配置し、サイズ変更後に開いたままになっている両側(上、右、下、左)に黒い背景を配置しました。画像は、指定された仕様よりも高かったり、広かったりする場合があります。

その黒い背景を白くする必要があり、この質問imagescreatetruecolor with a white background で提案されている回答に従って みました背の高い画像では、左側を白くすることに成功しましたが、画像の右側を白くすることはできません. これが私のコードの一部です。

$file1new = imagecreatetruecolor($framewidth, $frameheight);

if(isset($fromMidX) && $fromMidX > 0){
    $white = imagecolorallocate($file1new, 255, 255, 255); 
    $rightOffset = ($framewidth - $fromMidX) + 1;
    imagefill($file1new, 0, 0, $white);  //Line 1
    imagefill($file1new, $rightOffset, 0, $white); //Line 2 
}

変数 $framewidth = 515、$framheight = 343、$fromMidX は x 座標オフセットです。行 2 で $rightOffset を静的な量の 510 に置き換えると、右側はすべて黒のままです (最後の 5 ピクセルも)。さらに良いことに、1 行目はコメント アウトしますが、2 行目はコメント アウトしません。左側は白のままで、右側は黒のままです。

imagefill() がどのように機能するかを理解する方法は、指定された X、Y 座標から開始し、そのピクセルの色を新しい色 (私の場合は 255,255,255) であふれさせることです。だから、片側だけが白くなったのは、私のイメージがキャンバスを2つに分割していたからだと思いました. そのため、右側に 2 番目の imagefill() を追加しました。

私が得る唯一のことは、アップロードされた画像のオブジェクトを方程式に入れる前に、imagefill() を使用していることです。そのため、白で塗りつぶされたものにどのように影響するかはわかりません。

どんな洞察も大歓迎です。

編集1:上記のコードの後、私はこれを持っています:

$source = imagecreatefromjpeg($image); //Line 3
imagecopyresampled($file1new, $source , $fromMidX, $fromMidY , 0, 0, $framewidth, /$frameheight, $w, $h); //Line 4
imagejpeg($file1new, $image,85);
imagedestroy($file1new);

変数 $image は、後でアップロードした画像の場所です

move_uploaded_file($_FILES['image']['tmp_name'], $location);
$image = $location;

行 3 と行 4 をコメントアウトすると、結果の画像はすべて白になります。

また、画像にサイズ変更操作を適用する前に、画像をすべて白で塗りつぶしていると思いました。

4

1 に答える 1

4

要求された画像を読み込んだ後、右側を補充してみてください。

<?php
$source = imagecreatefromjpeg($image); //Line 3
$file1new = imagecreatetruecolor($framewidth, $frameheight);

$white = imagecolorallocate($file1new, 255, 255, 255);
//fill whole image with white color
imagefill($file1new, 0, 0, $white);  //Line 1

//find right side of image
$rightOffset = ($framewidth - $fromMidX) + 1;

//insert source file into new image
imagecopyresampled($file1new, $source , $fromMidX, $fromMidY , 0, 0, $framewidth, $frameheight, $w, $h); //Line 4

//fill image right hand side with white
imagefill($file1new, $rightOffset, 0, $white); //Line 2 

imagejpeg($file1new, $image,85);
imagedestroy($file1new);
?>
于 2013-01-02T18:07:36.457 に答える