aynı sorunu bende yaşamıştım.

resmi base64'e çevirirken ve bunu t ekrar resim formatına alırken base64 başlangıç değerlerine dikkat et. ben standart hale getirip sorunu aşmıştım.

public function base64($resim){
		$im = file_get_contents($resim);
		$imdata = base64_encode($im);
		$r_url = "data:image/x-icon;base64,".$imdata;
    	$this->base64url = $r_url;
      return true;
	}

	public function getimagesize_fromstring($string_data){
		$uri = 'data://application/octet-stream;base64,'  . base64_encode($string_data);
		return getimagesize($uri);
	}

	public function base64resimkayit($resim,$nereye,$isim){
		global $siteurl;
		$img = urldecode($resim);
		$img = str_replace('data:image/x-icon;base64', '', $img);
		$img = str_replace('data:image/jpeg;base64,', '', $img);
		$img = str_replace(' ', '+', $img);
		$data = base64_decode($img);
		$x = $this->getimagesize_fromstring($data);
		if($isim==""){
			$isim = uniqid();
		} else {
			$isim = $isim;
		}
		if($x[0] > 40 and $x[1] > 40 and $this->mimes($x['mime'])){
			$file = $nereye . $isim . '.'.$this->mimeuzanti;
			$success = file_put_contents($file, $data);
			if(!$this->resimkontrol($file)){
				return false;
			} else {
				if($success){
					$resim = $siteurl.'/'.$file;
					$this->resimyolu = str_replace("../","",$resim);
					return true;
				} else {
					return false;
				}
			}
		} else {		
			return false;
		}
	}