PHP kompres gambar mengoptimalkan, mengubah ukuran dan mengunggah

oleh Vincy. Terakhir diubah pada 13 Juli 2022.

Apakah Anda memiliki file gambar yang berat di aplikasi Anda? Dan apakah Anda ingin mengoptimalkannya sebelum memasukkannya ke direktori aplikasi? Kode gambar kompres PHP ini akan membantu Anda mengoptimalkan gambar sebelum diunggah.

Gambar terkompresi diperkecil dari aslinya berdasarkan kualitas dan ukuran. Proses ini membuat perpustakaan media Anda ringan dan dioptimalkan.

Artikel ini menggunakan Fungsi PHP GDs untuk mengimplementasikan kompresi gambar. Ia menggunakan fungsi imagecreatefromjpeg(), imagejpeg() untuk mengubah ukuran gambar.

Kita akan melihat contoh cepat dan contoh unggulan di PHP untuk mencapai ini.

Contoh Cepat

Ini adalah proses dua langkah bahwa kode contoh ini melakukan gambar kompres PHP.

  1. Langkah 1: imagecreatefromjpeg() mendapatkan referensi sumber daya dari gambar sumber.
  2. Langkah 2: imagejpeg() membuat gambar terkompresi dan mengeluarkannya ke browser.
<?php
$sourceFile="image.jpg";
$outputFile="compressed-image.jpg";
$outputQuality = 60;
$imageLayer = imagecreatefromjpeg($sourceFile);
imagejpeg($imageLayer, $outputFile, $outputQuality);
?>

Pada langkah kedua, ia menerima pengidentifikasi gambar sumber dan kualitas target. Itu juga menerima nama file output di mana versi terkompresi akan berada.

Ini memiliki jumlah baris paling sedikit yang ditunjukkan di bawah ini.

Ini mengoptimalkan sumber dan menghasilkan gambar yang diubah ukurannya dengan kualitas yang ditentukan.

Ada fungsi alternatif di bawah ekstensi PHP yang berbeda untuk mengimplementasikan kompres gambar. Fungsi PHP ImageMagick berikut digunakan untuk melakukan ini.

  • Imagick::setImageCompression
  • Imagick::setImageCompressionQuality

Contoh 2: PHP kompres gambar dan unggah ke database

Jika Anda mencari unggahan gambar PHP AJAX, lihat artikel tertulis yang ditautkan sebelumnya. Contoh ini memberikan lebih banyak fitur pada gambar kompres PHP dibandingkan dengan kode di atas. Beberapa fitur tersebut adalah,

  1. Opsi unggah gambar melalui formulir HTML.
  2. Menangani sumber gambar JPEG, GIF, dan PNG untuk dioptimalkan.
  3. Validasi file gambar dan pelaporan kesalahan yang tepat.

Ini akan berguna untuk menyematkan ke aplikasi dengan penanganan tambahan ini. Lihat artikel sebelumnya ini jika Anda mencari unggahan gambar PHP AJAX.

Struktur file

Tangkapan layar ini menunjukkan struktur file dari contoh gambar kompres PHP sederhana. Ini berisi file terstruktur dan mudah dimengerti.


Bagian ini menjelaskan langkah-langkah untuk menyiapkan contoh ini di lingkungan pengembangan.

Langkah 1: Impor skrip basis data

Impor skrip SQL ini ke tabel database Anda. Itu membuat tabel tbl_image untuk menjalankan contoh ini. Itu akan memiliki nama gambar dan jalurnya saat diunggah.

Itu juga menambahkan indeks untuk pengaturan kunci utama dan pengaturan tanda auto_increament.

sql/struktur.sql

--
-- Database: `image_upload`
--

--
-- Table structure for table `tbl_image`
--

CREATE TABLE `tbl_image` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `image` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tbl_image`
--
ALTER TABLE `tbl_image`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_image`
--
ALTER TABLE `tbl_image`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Langkah 2: Rancang formulir unggah gambar

Kode ini menampilkan formulir HTML dengan opsi untuk mengunggah gambar. HTML menerima atribut membatasi jenis file untuk memungkinkan hanya gambar untuk dipilih.

Tindakan pengiriman formulir memanggil validasi JavaScript. Ini memastikan bahwa input file tidak kosong.

Ini menargetkan titik akhir untuk mengoptimalkan gambar dengan proses kompresi. Setelah proses kompres gambar PHP berhasil, itu menunjukkan pratinjau gambar.

index.php (Formulir Unggah Gambar HTML)

<html>
<head>
<link href="https://phppot.com/php/php-compress-image/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div class="container">
        <h1>PHP Image Compress</h1>
        <div class="form-container">
            <form class="form-horizontal" action="" method="post"
                id="image" enctype="multipart/form-data" name="form"
                onsubmit="return validateImage()">
                <label>Choose image to compress</label>
                <div Class="input-row">
                    <input type="file" name="image" id="file"
                        class="file" value=""
                        accept=".jpg, .jpeg, .png, .gif">
                </div>
        		<?php
        if (! empty($result[0]["image"])) {
            ?>
            <!-- PHP image compress preview  -->
                <img src="<?php echo $result[0]["image"] ;?>"
                    class="img-preview" alt="photo">
    		<?php } ?>
                <div class="input-row">
                    <input type="submit" name="send" value="Upload"
                        class="btn">
                    <div id="response"
                        class="<?php if(!empty($response["type"])) { echo $response["type"] ; } ?>">
                    <?php if(!empty($response["message"])) { echo $response["message"]; } ?>
                    </div>
                </div>
            </form>
        </div>
    </div>

    <script src="jquery-3.2.1.min.js"></script>
    <script>
    function validateImage() {
        var InputFile = document.forms["form"]["image"].value;
        if (InputFile == "") {
          error = "No source found";
          $("#response").html(error).addClass("error");;
          return false;
        }
        return true;
      }
    </script>
</body>
</html>

Memproses aksi gambar kompres PHP

Kode PHP ini ada di awal halaman arahan bernama index.php. Ini meminta tindakan gambar kompres PHP setelah pengguna mengirimkan formulir.

Pertama, ini disebut kompresGambar() berfungsi untuk mengubah ukuran. Dengan demikian, ini mengoptimalkan dan menyimpan gambar ke dalam folder. Setelah gambar berhasil disimpan di folder, maka path akan disimpan di database.

index.php (PHP kompres gambar tindakan)

<?php
namespace Phppot;

require_once __DIR__ . '/lib/ImageModel.php';

$imageModel = new ImageModel();

if (isset($_POST['send'])) {
    $source = $_FILES["image"]["tmp_name"];
    $destination = "uploads/" . $_FILES["image"]["name"];
    $response = $imageModel->compressImage($source, $destination, 90);
    if (!empty($response)) {
        $id = $imageModel->insertImage($destination);
        if (!empty($response)) {
            $response["type"] = "success";
            $response["message"] = "Upload Successfully";
            $result = $imageModel->getImageById($id);
        }
    } else {
        $response["type"] = "error";
        $response["message"] = "Unable to Upload:$response";
    }
}
?>

Kelas model PHP untuk mengompresi gambar

Kelas model PHP ini memiliki fungsi untuk melakukan hal berikut.

Fungsi penyisipan gambar PHP menetapkan target untuk menempatkan jalur gambar yang diunggah.

Fungsi compressImage() digunakan untuk mengompresi file yang diunggah. Fokus utama dari proses ini adalah untuk mengoptimalkan kualitas gambar.

lib/ImageModel.php

<?php
namespace Phppot;

use PhppotDataSource;

class ImageModel
{

    private $conn;

    function __construct()
    {
        require_once 'DataSource.php';

        $this->conn = new DataSource();
    }

    function getAll()
    {
        $query = "SELECT * FROM tbl_image";
        $result = $this->conn->select($query);
        return $result;
    }

    function getImageById($id)
    {
        $query = "SELECT * FROM tbl_image WHERE id=?";
        $paramType="i";
        $paramValue = array(
            $id
        );
        $result = $this->conn->select($query, $paramType, $paramValue);
        return $result;
    }

    function insertImage($destination)
    {
        $insertId = 0;
        if (! empty($destination)) {
            $query = "INSERT INTO tbl_image(name,image) VALUES(?,?)";
            $paramType="ss";

            $paramValue = array(
                $_FILES["image"]["name"],
                $destination
            );
            $insertId = $this->conn->insert($query, $paramType, $paramValue);
        }
        return $insertId;
    }

    function compressImage($sourceFile, $outputFile, $outputQuality)
    {
        $imageInfo = getimagesize($sourceFile);
        if ($imageInfo['mime'] == 'image/gif')
        {
            $imageLayer = imagecreatefromgif($sourceFile);
        }
        else if ($imageInfo['mime'] == 'image/jpeg')
        {
            $imageLayer = imagecreatefromjpeg($sourceFile);
        }
        else if ($imageInfo['mime'] == 'image/png')
        {
            $imageLayer = imagecreatefrompng($sourceFile);
        }
        $response = imagejpeg($imageLayer, $outputFile, $outputQuality);
        return $response;
    }
}
?>

Output: Kompres gambar PHP

Tangkapan layar di bawah ini menunjukkan output dari contoh gambar kompres PHP ini. Ini menampilkan opsi pilih file untuk mengunggah gambar melalui formulir HTML.

Ini menunjukkan pratinjau gambar yang diunggah setelah pengiriman formulir.

Gunakan skenario kasus yang memerlukan ‘gambar kompres PHP’

Ada beberapa skenario yang perlu memiliki file media dalam kualitas yang optimal. Dalam kasus seperti itu, utilitas gambar kompres PHP ini akan berguna untuk memiliki gambar yang ringan.

  • Aplikasi galeri foto online.
  • Aplikasi yang membuat dan memelihara beberapa gambar mini untuk setiap gambar.
  • Saat pengguna mengunggah gambar berat yang melebihi batas yang diizinkan.

Kesimpulan

Semoga bermanfaat bagi Anda untuk mempelajari proses image kompres PHP. Kami telah melihat tujuan dan kebutuhan pekerjaan ini dalam aplikasi PHP.

Skenario kasus penggunaan yang dibahas di atas membenarkan pentingnya memiliki gambar terkompresi.

Contoh-contoh yang telah kita lihat dapat membantu untuk mengetahui langkah-langkah penerapannya. Ini akan membuat Anda membuat util file gambar Anda sendiri untuk melakukan tindakan kompres gambar PHP.
Unduh

Kembali ke Atas


Source link