ユーザーがコンテナー内の画像のサイズを変更できるようにしてから、コンテナーのサイズの結果の画像を作成する必要があるという問題が発生していますが、画像はユーザーの選択に従ってスケーリングおよび調整されています。
たとえば、コンテナが 400 x 200 で、ユーザーが 600 x 100 のロゴを配置できるようにしたい場合、ロゴが収まるように縮小して上部と下部にスペースを残すことができます。上下に適切なギャップがある 400x200 の画像として保存できるようにする必要があります。
私が見つけたのは、画像コンテンツ(この例のロゴ)がコンテナの上部と右の両方を超えている場合はすべて問題ないか、どちらかを超えていない場合は問題ありませんが、1つを超えていない場合もう一方は黒く塗りつぶされます-またはそのようなもの-以下の例を参照してください...
以下は結果の例です。これは私が使用しているコードです...
$cropped = wp_imagecreatetruecolor( $frame_w, $frame_h);
$backgroundColor = imagecolorallocatealpha($cropped, 0, 0, 0, 127);
//imageantialias( $cropped, true );
//if $img_y or $img_x are negative we need to apply the value to $img_x and $img_y
//if $img_y or $img_x are positive we need to apply the value to $dest_x and $dest_y
$dest_x = strstr($img_x,'-') ? 0 : abs($img_x);//if neg is true = 0 else offset inside
$dest_y = strstr($img_y,'-') ? 0 : abs($img_y);
$img_x = strstr($img_x,'-') ? abs($img_x) : 0;//if neg is true offset outside else 0
$img_y = strstr($img_y,'-') ? abs($img_y) : 0;
$img_w = $img_w > $frame_w ? $frame_w : $img_w;
$img_h = $img_h > $frame_h ? $frame_h : $img_h;
imagecopy( $cropped, $resized, $dest_x, $dest_y, $img_x, $img_y, $img_w, $img_h);
//imagecopymerge( $cropped, $resized, $dest_x, $dest_y, $img_x, $img_y, $img_w, $img_h,100);
//imagecopyresampled( $cropped, $resized, $dest_x, $dest_y, $img_x, $img_y, $frame_w, $frame_h, $img_w, $img_h );
imagefill($cropped, 0, 0, $backgroundColor);//putting this after the copy makes any black borders transparent again unless $resized does not extend beyond both dimensions
例
画像が上または右からはみ出していない (罰金)
画像は下からはみ出していますが、正しくはありません (問題ありません)
画像は両方を超えています (細かい)
画像は右からはみ出していますが、下からはみ出していません (問題ありません)
イメージはどちらにも及ばない (細かい)
私は文字通りこれを修正しようとして髪を引き裂いており、私が考えることができるimagesavealpha、imagecopymerged、imagecolorallocatealpha、imagealphablendingなどの可能な限りの組み合わせを試しましたが、これを修正するものは何もないようです...
これは GD のバグ/制限ですか? それとも、誰かが私の救助に来ることができますか!