Acá te "devuelvo" tu código con algunas correcciones. Para escalar la imagen, necesitas usar un poco de GD Library. Acá te explico algunas cosas básicas. Espero que te sirva!
Código PHP:
<?php
function watermark_image ($source_file, $source_watermark, $destination_file) {
list($width, $height) = getimagesize($source_file);
$image = imagecreatefromjpeg($source_file);
$watermark = imagecreatefrompng( $source_watermark );
list($src_width, $src_height) = getimagesize($source_watermark);
// Primero que nada necesitas establecer un ancho y alto máximo permitidos para tu marca de agua. En este caso puse 200px * 200px pero la medida la podés cambiar a tu conveniencia
$max_ancho = 200 ;
$max_alto = 200 ;
// En cuanto a las medidas proporcionales, se obtienen con una serie de fórmulas pre-establecidas que acá adapté para tu código
$x_ratio = $max_ancho / $src_width ;
$y_ratio = $max_alto / $src_height ;
if( $src_width <= $max_ancho && $src_height <= $max_alto ){
$anchoFinal = $src_width ;
$altoFinal = $src_height ;
} else if( $src_width > $max_ancho ){
$altoFinal = ceil( $x_ratio * $src_height ) ;
$anchoFinal = $max_ancho ;
} else if( $src_height > $max_alto ){
$anchoFinal = ceil( $y_ratio * $src_width ) ;
$altoFinal = $max_alto ;
}
// Como podrás ver, si el ancho y el alto no exceden los tamaños máximos, las medidas originales serán respetadas, y sino se modificarán proporcionalmente
imagecopyresampled($image, $watermark, 0, 0, 0, 0, $anchoFinal, $altoFinal, $src_width, $src_height);
if ($destination_file<>'') {
imagejpeg($image, $destination_file, 100);
} else {
header('Content-Type: image/jpeg');
imagejpeg($image, null, 100);
};
imagedestroy($image);
imagedestroy($watermark);
}
?>