Croping Gambar Otomatis Dengan Verot Class Upload PHP
Dibawah ini merupakan contoh bagaimana saya melakukan handling error sekaligus melakukan cropting gambar secara otomatis dengan rasion tertentu menggunakan class upload dari verot php
Dokumentasi lengkap : https://github.com/verot/class.upload.php/blob/master/README.md
Pertama saya melakukan validasi ketika terjadi error atau kegagalan pada saat mengupload seperti misal ektensi tidak sesuai ukuran terlalu besar dsb.
Paramater bisa di set sebelum di proses seperti ukuran rasion croping dan lain sebagainya.
<?php
namespace Validate\user;
use Helper\Helper;
use Core\Crudtable;
use Laminas\Diactoros\Response\JsonResponse;
class Validateuser
{
private $app;
public function __construct(){
$this->app = new Helper;
}
public function user_validate(array $data, $confirm_pass, $upload='')
{
$errors = [];
if (empty($data['name'])) {
$errors[] = 'Username tidak boleh kosong';
}elseif($this->app->validate_username($data['name'])){
$errors[] = 'Format username tidak diperbolehkan';
}elseif (strpos($data['name'], ' ') !== false) {
$errors[] = 'Username tidak boleh mengandung spasi';
}
if (empty($data['pass'])) {
$errors[] = 'Password tidak boleh kosong';
} elseif(strlen($data['pass'])<6) {
$errors[]='Password tidak boleh kurang dari 6 karakter';
} elseif(empty($confirm_pass)) {
$errors[]='Konfirmasi password tidak boleh kosong';
} elseif($data['pass']!=$confirm_pass){
$errors[] = 'Konfirmasi password tidak cocok';
}
if(empty($data['mail'])) {
$errors[] = 'Email tidak boleh kosong';
}elseif ($this->app->validate_email($data['mail'])){
$errors[]='Format email tidak sesuai';
}
//Setting upload
$upload->file_max_size = 2000000;
$upload->allowed = array('image/png','image/jpeg','image/jpg');
//croping otomatis
$upload->image_resize = true;
$upload->image_ratio_crop = true;
$upload->image_x = 200;
$upload->image_y = 200;
$upload->process('upload/cropped');
if(!$upload->processed) $errors[] = $upload->error;
if(empty($data['role'])){
$errors[] = 'Role tidak boleh kosong';
}
if (count($errors) > 0) {
return new JsonResponse(['status' => 'error', 'messages' => $errors], 400);
}
return null;
}
public function user_validate_update(array $data)
{
$errors = [];
if (count($errors) > 0) {
return new JsonResponse(['status' => 'error', 'messages' => $errors], 400);
}
return null;
}
public function __destruct()
{
}
}
Selanjutnya pada controller atau logika modul, jika misal kita ingin mengambil nama file dari berkas/gambar yang telah kita unggah/upload, kita bisa mengesetnya disini. Contoh :
public function user_proses(Validateuser $validate, Usermodel $user, Helper $app)
{
if (!$app->is_csrf_valid()) {
return new JsonResponse(['status' => 'error', 'message' => 'Token tidak valid'], 500);
}
//set model
$data = $user->user_created();
$upload = new Upload($_FILES['photo'], 'id_ID');
//simpan nama gambar secara random
$randomHash = bin2hex(random_bytes(16));
$upload->file_new_name_body = $randomHash;
$validationResponse = $validate->user_validate($data, $app->post('confirm_password'), $upload);
if ($validationResponse) {
return $validationResponse;
}
// Baca isi file yang diunggah dan konversi ke Base64
$filePath = $upload->file_dst_pathname;
$imageData = file_get_contents($filePath);
$base64 = base64_encode($imageData);
// Simpan ke database
$data['pass'] = password_hash($data['pass'], PASSWORD_DEFAULT);
$data['photo'] = $base64;
if($this->save('users',$data)):
$app->unset_session('csrf');
return new JsonResponse(['status' => 'success', 'message' => 'Data berhasil disimpan']);
else:
return new JsonResponse(['status' => 'error', 'message' => 'Data gagal disimpan'], 500);
endif;
}
0 Response to "Croping Gambar Otomatis Dengan Verot Class Upload PHP "
Post a Comment
Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin