$image = imagecreatefromstring(file_get_contents('test.jpg'));
// получаем разеры исходника
$ix = imagesx($image);
$iy = imagesy($image);
// делаем холст с заливкой фона
$newimage = imagecreatetruecolor($ix, $iy);
$transparent = imagecolorallocatealpha($newimage, 255, 255, 255, 127);
imagefill($newimage, 0, 0, $transparent);
imagealphablending($newimage, true);
imagesavealpha($newimage, true);
// накладываем исходник на холст
imagecopyresampled($newimage, $image, 0, 0, 0, 0, $ix, $iy, $ix, $iy);
// берем вотермарку
$imageW = imagecreatefromstring(file_get_contents('logo.png'));
$wx = imagesx($imageW);
$wy = imagesy($imageW);
// для поворота нужен прозрачный холст
$new = imagecreatetruecolor($wx, $wy);
$transparent = imagecolorallocatealpha($new, 0, 0, 0, 127);
$rotate = imagerotate($imageW, 45, $transparent);
imagealphablending($rotate, true);
imagesavealpha($rotate, true);
// пересчет размеров после поворота
$ix = imagesx($rotate);
$iy = imagesy($rotate);
// наложение 50 50 начало от левого верхнего угла
imagecopyresampled($image, $rotate, 50, 50, 0, 0, $ix, $iy, $ix, $iy);
// сохранение
imagepng($image, 'testus.png', 9, PNG_ALL_FILTERS);