Resize image tidak hanya menjadi tugas berbagai macam tool design grafis, tetapi hal ini juga bisa dilakukan dengan baik oleh bahasa pemrograman, termasuk PHP. Keberadaan ekstensi GD memungkinkan kita untuk modifikasi ukuran gambar dengan mudah sekali. Sering sekali dalam proses upload, kita akan mendapatkan ukuran gambar yang lumayan besar. Biasanya kita melakukan batasan ukuran file dalam proses upload ini.
Tapi bagaimana kalau kita akan menggunakan satu gambar untuk ukuran yang berbeda-beda? Misalnya akan membuat thumbnail dari gambar yang diupload. Tentu kita semestinya tetap hanya membuat satu form upload untuk mempermudah user dan membuat duplikasi gambar dengan ukuran berbeda. Dan di sinilah kita akan mempergunakan library GD.
Sekilas mengenai library GD
GD Graphics Library merupakan librari perangkat lunak untuk grafis oleh Thomas Boutell dan lainnya untuk memanipulasi gambar secara dinamis. Bahasa pemrograman asli yang digunakan adalah ANSI C, tetapi memiliki interface untuk banyak bahasa pemrograman lainnya. Librari ini dapat membuat GIF, JPEG, PNG, dan WBMP. Library GD dapat membuat gambar terdiri dari garis, busur, teks (menggunakan tipe font), serta beberapa warna. Versi 2.0 menambahkan dukungan untuk gambar true-color, alpha, resampling, dan banyak fitur lainnya.
Berikut ini adalah tutorial sederhana untuk kasus di atas
Buat file upload.html untuk membuat halaman upload :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<!DOCTYPE html> <html> <head> <title>Tutorial Upload dan Resize Image</title> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> </head> <body> <form method="POST" action="upload_process.php" enctype="multipart/form-data"> <input type="file" name="gambar" /> <input type="submit" name="upload_image" value="Upload" /> </form> </body> </html> |
Buat file upload_process.php untuk memproses image yang diupload :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
error_reporting(0); $folder = "images/"; $upload_image = $_FILES['gambar']['name']; // tentukan ukuran width yang diharapkan $width_size = 480; // tentukan di mana image akan ditempatkan setelah diupload $filesave = $folder . $upload_image; move_uploaded_file($_FILES['gambar']['tmp_name'], $filesave); // menentukan nama image setelah dibuat $resize_image = $folder . "resize_" . uniqid(rand()) . ".jpg"; // mendapatkan ukuran width dan height dari image list( $width, $height ) = getimagesize($filesave); // mendapatkan nilai pembagi supaya ukuran skala image yang dihasilkan sesuai dengan aslinya $k = $width / $width_size; // menentukan width yang baru $newwidth = $width / $k; // menentukan height yang baru $newheight = $height / $k; // fungsi untuk membuat image yang baru $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filesave); // men-resize image yang baru imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // menyimpan image yang baru imagejpeg($thumb, $resize_image); imagedestroy($thumb); imagedestroy($source); echo 'Image Asli : <img src="' . $filesave . '" /><br />'; echo 'Image setelah di resize : <img src="' . $resize_image . '" />'; |
Cukup mudah bukan 🙂
Untuk tips dan trik lainnya menggunakan PHP, silakan klik di sini.
Terima Kasih penjelasan dan scriptnya mas, sudah saya coba. Berhasil dan sangat membatu
Untuk kualitas gambarnya agar tidak terlalu pecah bagaimana ya?
gambar aslinya pakai yang resolusi lebih tinggi
kalo kita mau bikin <input type="file" bla bla,, kan nnti muncul form upload (browse) image. nah untuk mengganti tampilan button browsenya gimana ya
pakai css gan, coba aja cari “customize upload button css”
ini pake php versi berapa ya? ko di saya ga beres
PHP 7, apa pesan error yang muncul?
kalo hasil resize nya malah jadi gambar hitam kenapa ya?
hi gan, apakah ukuran width dan height gambar aslinya sudah lebih besar dari gambar yang akan dihasilkan?
kejadian sama gan, dan size gambar asli udah lebih besar dari size yang dihasilkan, tapi tetap sama aja hitam, padahal ada satu kasus dengan ukuran yang lebih kecil malah bisa gan dan hasilnya bener resize
gimana ya gan solusinya??
ini kalo pake gambar PNG ya hasilnya blank hitam.
kalo emang png pakai cara ini https://pngquant.org/php.html
tipe gambarnya png ya? mungkin coba pakai fungsi imagecreatefrompng()
atau coba seperti agan INAFSUWANTO di atas.
disini https://www.codermen.com/blog/103/compress-image-size-while-uploading-in-php
bisa jpg png jpeg , hanya karena aku newbie bingung mau gabungin dengan data form yang misalnya ada nama, alamat dll
tinggal menambahkan input type yang lain aja, kemudian validasi, dan simpan di database. Contoh script di atas memang hanya untuk upload dan resize gambar.
kok ngga bisa ya
ada pesan error yang muncul?
nanya dong, bagaimana supaya bisa disimpn di data base my sql
hi gan, yang di simpan di database bisa berupa path dari gambar tersebut. Kalau mau menyimpan gambarnya langsung di dalam table, bisa di convert dulu menggunakan base64 encode dan kemudian memanggilnya dengan fungsi image create from string
kejadian sama gan, dan size gambar asli udah lebih besar dari size yang dihasilkan, tapi tetap sama aja hitam, padahal ada satu kasus dengan ukuran yang lebih kecil malah bisa gan dan hasilnya bener resize
gimana ya gan solusinya??
boleh tau file extension dari gambar asalnya? jpg atau JPG atau jpeg atau yang lain? atau coba debug untuk mengetahui hasil resize sukses atau tidak.
// men-resize image yang baru
$resizeimage = imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
var_dump($resizeimage);
// menyimpan image yang baru
$newimage = imagejpeg($thumb, $resize_image);
var_dump($newimage);
Gan numpang tanya, kalau atur heightnya biar sama dengan widthnya gimana ya ?
maksudnya otomatis nge-crop gambarnya ya? script di atas sih cuman resize aja, bukan untuk nge-crop
gan mau tanya, bagiamana jika gambar yang di resize dan upload ada beberapa gambar sekaligus ? contoh langsung 2 gambar sekaligus yang di upload ? menggunakan for ?
iya gan, pasti menggunakan looping
misi gan, terima kasih info nya,
sudah berhasil tapi hasil resizenya nge rotate -90 derajat kenapa ya,
bagaimana ya mengembalikan seperti aslinya
hmmm aneh juga ya, apakah gambarnya landscape atau portrait?
Saya bantu jawab kenapa gambarnya hitam setelah di resize.
Bukan kesalahan di PHP nya.
Teman-teman harap memperhatikan file original nya.
Contoh:
File ori = ABCD.jpg
Ukuran = 111 x 111 x 24b <—– Ukuran 24b itu yang proporsional.
Kemungkinan gambar hitam itu karna ukuran file originalnya 111 x 111 x 8b <——– Ukuran 8b menjadikan gambar setelah rezise menjadi hitam.
Teruskan berbagi Bang Yudana…
thanks bang hehehe
Terimakasih, sangat berguna bagi kami
pas saya pencet upload kok malah yang nimbul scriptnya bukan hasil gambarnya yaa ?
apa pesan errornya?
untuk mengecilkan ukuran gambar lagi gimana ya bang??
tinggal ganti $width_size = 480;
Makasih banyak gan sangat membantu
permisi saya mau menanyakan kenapa script di bawah ini tidak bekerja ya? untuk cek ukuran gambar
if( $ukuranFile > 1000000 ) {
echo ”
alert(‘ukuran gambar terlalu besar!’);
“;
return false;
}
$ukuranFile nya ini ngambil dari fungsi getimagesize? atau bagaimana?
Kalau sekiranya gambar lama tidak perlu d upluoad gmna ya gan…. ?? 🙂
tinggal tambahan fungsi unlink untuk path dan nama file nya ($filesave)