<?php
imagecopyresampled($yeniresim, $resim, 0, 0, 0, 0, "71", "71", $boyutlar[0], $boyutlar[1]);
?>
Arkadaşım burada resmin boyutunu 71*71 olarak veriyorsun, ancak öncesinde
<?php
$yeniresim=imagecreatetruecolor("300",$yeniyukseklik);
?>kodu ile 300px'e göre boyutlandırıp, bir resim oluşturuyorsun ve birleştiriyorsun. O nedenle resmin o şekilde çıkıyor. Burada $boyutlar[0], ve $boyutlar[1] senin resminin orjinal boyutları, 71 yazdığın yerler ise çevirmek istediğin boyutlar oluyor. Yani bu iki kısımdaki boyutların uyumlu olması gerekir.
Bunun dışında bir tavsiye vermek gerekirse, resim ismi için sadece 10 harf olması yeterliyse, ayrıca fonksiyon yazmana da gerek yok, hazır fonksiyonları kullanmak çok daha hızlı olur ve gereksiz işlemden korur. En basiti time() ile vs halledebilirsin.
<?php
$yeni_isim = time();
//veya
$yeni_isim = substr(md5(time()),0,10); //10 yerine kaç hane istiyorsan yazarsın
?>
Ayrıca işlem yapmak için post['gonder'] var mı diye değil, $_FİLE değeri var mı diye kontrol yaparsan daha sağlıklı olur. Çünkü, bu şekilde resim eklenmeden göndere basılsa da bu işlemler yapılır, hata gösterimi kapalıysa hata vermez sadece. Yani
<?php
if ($_POST["gonder"]=="Yukle"){
?>yerine:
<?php
if(isset($_FILES['resim']) && !empty ($_FILES['resim']['name'])){
?>şeklinde yapman daha sağlıklıdır.