şu şekilde deneyin birde ve klasör yazma izinlerinin 777 olduguna emin olun.
<?php
$klasor = 'test';
$resimler = scandir($klasor);
$ust_resim = $klasor . '/b.jpg';

function dosyaUzanti($dosyaAdi) 
{
    return "." . array_pop(explode('.', $dosyaAdi));
}
foreach ($resimler as $resim) 
{
    if (@dosyaUzanti($resim) == '.jpg') 
    {
        $alttaki_resim = $klasor . '/' . $resim; // Resim
        $ustteki_resim = $ust_resim; // Resim üstüne eklenecek resim, şeffaflığı için aşağıda ayarı var.
        $seffaflik = 40; // Üstteki Resimin şeffaflığı
        $kalite = 85;

        $on = imagecreatefromjpeg($ustteki_resim);
        $on_genislik = imagesx($on);
        $on_yukseklik = imagesy($on);
        $arka = imagecreatefromjpeg($alttaki_resim);
        $arka_genislik = imagesx($arka);
        $arka_yukseklik = imagesy($arka);

        $koordinat_x = $arka_genislik - $on_genislik;
        $koordinat_y = $arka_yukseklik - $on_yukseklik;

        imagecopymerge($arka, $on, $koordinat_x, $koordinat_y, 0, 0, $on_genislik, $on_yukseklik, $seffaflik);
        imagejpeg($arka, $alttaki_resim, $kalite);

        $son_hali = imagecreatefromjpeg($alttaki_resim);
        imagejpeg($son_hali, $alttaki_resim, $kalite);

        imagedestroy($on);
        imagedestroy($arka);  
        imagejpeg($son_hali, $alttaki_resim, $kalite);
    }
}

?>
Bu kod sadece jpg resimler için çalışır, gif ve png için ayrı fonksiyonlar kullanılıyor, isterseniz gif ve png içinde yazabilirim.