PHP | File input ile resim kaydetme, orantılı boyutlandırma, base64_encode

Written by Super User. Posted in Web Teknolojileri

Staj projemin web tarafı için kullandığım bir resmi file input ile alıp sunucuya kaydetme, bu resmi orantılı bir şekilde küçültme, sonrasında resmi base64 olarak kodlama işlemleri için kullandığım kod parçalarını ihtiyacı olacaklara yardımcı olması için paylaşmak istiyorum.

Öncelikle resmi alacağımız formu oluşturuyoruz. Formda dikkat etmemiz gereken kısımlar, özellik olarak enctype='multipart/form-data' girilmiş olması, ve file inputumuzun ismi.

<form name="ytekleForm" enctype='multipart/form-data'  action="ytekle-exec.php" method="post">
		<table>
		<tr>
		<td><label for="ytName">İsmi</label></td>
		<td><input type="text" name="ytName" id="ytName" /></td>
		</tr>
		<tr>
		<td><label for="ytCat">Kategorisi</label></td>
		<td><select name="ytCat">
							<option value="ytKahvaltilik">Kahvaltılık</option>
							<option value="ytHamurisi">Hamur işi</option>
							<option value="ytCorba">Çorba</option>
							<option value="ytYemek">Yemek</option>
							<option value="ytTatli">Tatlı</option>
						</select></td>
		</tr>
		<tr>
		<td><label for="ytIng">Malzemeler</label></td>
		<td><textarea name="ytIng"></textarea></td>
		</tr>
		<tr>
		<td><label for="ytPrep">Hazırlanışı</label></td>
		<td><textarea name="ytPrep"></textarea>	</td>
		</tr>
		<tr>
		<td><label for="ytPic">Resmi</label></td>
		<td><input type="file" name="ytPic" /> </td>
		</tr>
		

		<tr>
		<td></td>
		<td><button type="submit" name="ytSubmit"><span>Kaydet</span></button></td>
		</tr>
		</table>
	</form>

Şimdi formu gönderdiğimiz php dosyamızda resmimizi kaydetmemiz için gereken işlemlerimizi yapalım:

// Resmimizin koyulacağı dizinimiz
		$target_path = "uploads/";

		/* Resmimizin ismini, hedef yolumuza ekleyelim 
		Sonucumuz "uploads/filename.extension" şeklinde olacak */
		$target_path = $target_path . basename( $_FILES['ytPic']['name']); 
		
		if(move_uploaded_file($_FILES['ytPic']['tmp_name'], $target_path)) {
			echo "Dosya ".  basename( $_FILES['ytPic']['name'])." upload edildi.";
		} else{
			$errmsg_arr[] = 'Dosya yükleme sırasında bir sorun oluştu.';
			$errflag = true;
		}

Ben projemdeki kod parçalarını direk yapıştırıyorum, bunları kendinize göre düzenlemelisiniz.

Şimdi kaydettiğimiz resmimizi orantılı olarak küçültelim. Bunun için buradaki SimpleImage.php scriptine ihtiyacımız olacak.

                //Image resizing process
		include('SimpleImage.php');
		$image = new SimpleImage();
		$image->load($target_path);
		$image->resizeToWidth(350);
		$image->save($target_path);

Dosyamızın genişliğini 350 olacak şekilde ayarlayıp, orantılı bir şekilde küçülterek diğer dosyamızın üzerine yazdık. Şimdi resmimizi base64 olarak kodlamamız için ihtiyacımız olacak fonksiyonları yazalım.

                //ENCODE FUNCTION
		function base64_encode_image ($filename,$filetype) {
		if ($filename) {
                $imgbinary = fread(fopen($filename, "r"), filesize($filename));
                return base64_encode($imgbinary);
		}
		}
		
		//FILE EXTENSION FUNCTION
		function file_extension($filename)
		{
		$expFileName = explode(".", $filename);
		return $expFileName[1];
		}

Encode fonksiyonumuzu ve dosya uzantımızı bulmamızı sağlayacak fonksiyonumuzu yazdık. Şimdi sadece fonksiyonumuzu çağırmak kaldı.

                $ytFileExtension = file_extension($target_path);
		$ytPicEncode = base64_encode_image ($target_path,$ytFileExtension);

Tekrar hatırlatmak istiyorum, ben kodları projem için kullandıklarımdan direk aldım, bunları kendinize göre düzenleyiniz. Kolay gelsin.