すべての画像が中央に配置されている間、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 をコメントアウトすると、結果の画像はすべて白になります。
また、画像にサイズ変更操作を適用する前に、画像をすべて白で塗りつぶしていると思いました。