Напрямую через GD делается так (см. то, что в условии для png):
$fill = '#FFFFFF';
$img = imagecreatetruecolor($cw, $ch);
imagefill($img, 0, 0, $fill);
imagecolortransparent($img, $fill);
if($ext=='png'){
imagealphablending($img, false);
$transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagefill($img, 0, 0, $transparent);
imagesavealpha($img,true);
imagealphablending($img, true);
}
Здесь вы создаете прозрачный цвет и заливаете им (превращаете в него) все пиксели, совпадающие по цвету с пикселем в координатах [0, 0] (можете выбрать другую точку при желании)
Это точно работает.
Для метода с использованием JImage у меня прописано так:
$properties = JImage::getImageFileProperties($src);
// Расчет ширины и высоты в режиме автоподбора
if(!$width && $height) $width = $properties->width / $properties->height * $height;
elseif($width && !$height) $height = $properties->height / $properties->width * $width;
elseif(!$width && !$height){
$height = $properties->height;
$width = $properties->width;
}
$imgObject = new JImage($src);
$imgObject->setThumbnailGenerate(true);
$imgObject->resize($width, $height, false, JImage::SCALE_FIT);
$imgObject->filter('backgroundfill', array('color' => $fill));
$imgObject->toFile($dst, null, array('quality' => $quality));
Но не уверен (потому что не вижу), что тут поддерживается прозрачность. Возможно, забил за ненадобностью.