私はコードのスニペットを持っています、
そのアイデアは、定義された高さ/幅に透明なキャンバスを作成することです。そのため、そこにjpg/png/gifのいずれかを配置できます。
ただし、透過性のある PNG を配置する場合は、透過性を保持する必要があります。
これはコードのサンプルです
header("Content-type: image/png");
$canvas = imagecreatetruecolor($maxWidth, $maxHeight);
$image = $_GET['file'];
$leftOffset = ($maxWidth / 2) - ($width / 2);
$topOffset = ($maxHeight / 2) - ($height / 2);
$quality = (isset($_GET['quality'])) ? (int) ceil($_GET['quality'] / 10) : ceil($DEFAULT_QUALITY / 10);
$quality = $quality == 10 ? 9 : $quality;
switch($mime){
case "image/jpeg":
$image = imagecreatefromjpeg($image);
$red = imagecolorallocate($canvas, 0, 255, 0);
imagecolortransparent($canvas, $red);
imagefill($canvas, 0, 0 ,$red);
break;
case "image/gif":
$image = imagecreatefromgif($image);
break;
case "image/png":
$background = imagecolorallocate($canvas, 255, 0, 0);
imagecolortransparent($canvas, $background);
imagealphablending($canvas, false);
imagesavealpha($canvas, true);
$image = imagecreatefrompng($image);
break;
}
imagecopyresampled($canvas, $image, $leftOffset, $topOffset, 0, 0, $width, $height, $width, $width);
imagepng($canvas, null, $quality);
imagedestroy($canvas);
ただし、問題は、キャンバスが黒のままで、画像の周りのボックス領域が透明であることです。
下の画像はこれを示しています。ライム グリーンの色が本体 {background:lime;} であるため、透明な領域を見ることができます。
imagecreatetruecolor の後に透明色を使ってみた
$red = imagecolorallocate($canvas, 255, 0, 0);
imagecolortransparent($canvas, $red);
imagefill($canvas, 0, 0 ,$red);
.png にフェード効果がある場合、色が正確に 255, 0, 0 ではない、その周りに厄介な赤いグローが発生します。
助言がありますか?
ありがとう