Mengompres gambar sebelum diupload menggunakan PHP

1
Mengompres gambar sebelum diupload menggunakan PHP

Gambar yang berukuran besar membutuhkan lebih banyak waktu untuk memuat halaman web. Jika kamu ingin memuat gambar berukuran besar tanpa memengaruhi page load time, gambar perlu dioptimalkan untuk memperkecil ukurannya. Kompresi gambar sangat membantu mengurangi ukuran file gambar. Jadi, pengguna tidak perlu repot-repot mengoptimalkan gambar sebelum menguploadnya.

Mengompres / mengoptimalkan gambar sebelum disimpan ke server dapat dengan mudah diimplementasikan menggunakan PHP. Dalam hal ini, kualitas dan ukuran file gambar akan dikurangi sebelum disimpan ke server. Gambar yang dikompresi membantu mengurangi penggunaan penyimpanan server dan memuat halaman web lebih cepat.

Form upload file

Buat form HTML dengan bidang input file dan tombol kirim. Pastikan tag <form> berisi atribut berikut:

  • method="post"
  • enctype="multipart/form-data"
<form action="upload.php" method="post" enctype="multipart/form-data">
    <label>Pilih file gambar:</label>
    <input type="file" name="image">
    <input type="submit" name="submit" value="Upload">
</form>

Kompres dan upload gambar menggunakan PHP

Dalam file upload.php inilah yang akan menangani kompresi gambar dan proses upload.

  • compressImage() adalah fungsi custom yang membantu untuk mengompres dan menyimpan gambar di server menggunakan PHP.
  • Jika file disubmit
    • Ambil info file menggunakan metode PHP $_FILES
    • Kompres ukuran gambar dan upload gambar menggunakan fungsi compressImage()
    • Merender gambar dan menampilkan pesan status
<?php 

/*
 * fungsi untuk mengompres ukuran file gambar dan
 * mengupload ke server 
 */
function compressImage($source, $destination, $quality) { 
    // mendapatkan info gambar 
    $imgInfo = getimagesize($source); 
    $mime = $imgInfo['mime']; 
     
    // membuat gambar baru dari file sumber
    switch($mime){ 
        case 'image/jpeg': 
            $image = imagecreatefromjpeg($source); 
            break; 
        case 'image/png': 
            $image = imagecreatefrompng($source); 
            break; 
        case 'image/gif': 
            $image = imagecreatefromgif($source); 
            break; 
        default: 
            $image = imagecreatefromjpeg($source); 
    } 
     
    // menyimpan gambar 
    imagejpeg($image, $destination, $quality); 
     
    // mengembalikan gambar yang dikompres 
    return $destination; 
} 
 
 
// path untuk file yang diupload
$uploadPath = "uploads/"; 
 
// jika form upload disubmit 
$status = $statusMsg = ''; 
if(isset($_POST["submit"])){ 
    $status = 'error'; 
    if(!empty($_FILES["image"]["name"])) { 
        // info file 
        $fileName = basename($_FILES["image"]["name"]); 
        $imageUploadPath = $uploadPath . $fileName; 
        $fileType = pathinfo($imageUploadPath, PATHINFO_EXTENSION); 
         
        // hanya membolehkan format file tertentu 
        $allowTypes = array('jpg','png','jpeg'); 
        if(in_array($fileType, $allowTypes)){ 
            // sumber gambar sementara 
            $imageTemp = $_FILES["image"]["tmp_name"]; 
             
            // mengompres ukuran gambar 25% dan upload gambar 
            $compressedImage = compressImage($imageTemp, $imageUploadPath, 75); 
             
            if($compressedImage){ 
                $status = 'Sukses'; 
                $statusMsg = "Gambar berhasil dikompres."; 
            }else{ 
                $statusMsg = "Kompres gambar gagal!"; 
            } 
        }else{ 
            $statusMsg = 'Maaf, hanya file JPG, JPEG, dan PNG yang dibolehkan untuk diupload.'; 
        } 
    }else{ 
        $statusMsg = 'Silakan pilih file gambar untuk diupload.'; 
    } 
} 
 
// menampilkan status 
echo $statusMsg; 
 
?>

Kesimpulan

Secara umum, fungsi bawaan PHP move_uploaded_file() digunakan untuk mengupload file pada PHP. Tetapi, jika kamu ingin mengompres gambar sebelum diupload, fungsi custom compressImage() sangat berguna. Contoh kode diatas membantu kamu untuk mengompres file gambar tanpa menggunakan library tambahan.

BAGIKAN
Subscribe
Beritahu
guest

1 Comment
terlama
terbaru vote teratas
Inline Feedbacks
View all comments
Koir
Koir
Agustus 17, 2020 16:25

Anjir kukira, bakal panjang