Pada tulisan kali ini akan diberikan contoh kode tentang bagaimana cara membuat sistem upload gambar dimana saat proses penyimpanan gambar ke sistem juga dilakukan proses modifikasi ukuran gambar ke medium dan thumbnail. Menggunakan framework PHP CodeIgniter dengan Library PHP yang digunakan adalah GD2.
Berikut struktur direktori khusus untuk upload gambar (optional) :
uploads/ real/ medium/ thumbnail/
Direktori “real” untuk menyimpan gambar dengan ukuran sebenarnya, “medium” dan “thumbnail” untuk menyimpan gambar yang telah mengalami proses resizing ke ukuran medium dan thumbnail.
Langkah pertama, membuat form upload dengan nama file upload_form.php di View.
Sumber kode :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <html> <head> <title>Upload Form</title> </head> <body> <?php echo form_open_multipart('upload/do_upload');?> <input type="file" name="photo" size="20" /> <br /><br /> <input type="submit" value="upload" /> </form> </body> </html> |
Langkah terakhir, membuat proses penyimpanan gambar dan resizing di Controller, dengan nama file : upload.php .
Sumber kode :
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | <?php /** * Upload Class * * @subpackage Controller * @link http://www.kohaci.com/ * @author Freddy Yuswanto (freddy@lenteravision.com) */ class Upload extends Controller { public function __construct() { parent::Controller(); $this->load->helper(array('form', 'url')); } public function index() { $this->load->view('upload_form') ; } public function do_upload() { $config['upload_path'] = "./uploads/real/"; $config['allowed_types']= 'gif|jpg|png|jpeg'; $config['max_size'] = '2000'; $config['max_width'] = '2000'; $config['max_height'] = '2000'; $this->load->library('upload', $config); if ($this->upload->do_upload("photo")) { $data = $this->upload->data(); /* PATH */ $source = "./uploads/real/".$data['file_name'] ; $destination_thumb = "./uploads/thumbnail/" ; $destination_medium = "./uploads/medium/" ; // Permission Configuration chmod($source, 0777) ; /* Resizing Processing */ // Configuration Of Image Manipulation :: Static $this->load->library('image_lib') ; $img['image_library'] = 'GD2'; $img['create_thumb'] = TRUE; $img['maintain_ratio']= TRUE; /// Limit Width Resize $limit_medium = 200 ; $limit_thumb = 90 ; // Size Image Limit was using (LIMIT TOP) $limit_use = $data['image_width'] > $data['image_height'] ? $data['image_width'] : $data['image_height'] ; // Percentase Resize if ($limit_use > $limit_medium || $limit_use > $limit_thumb) { $percent_medium = $limit_medium/$limit_use ; $percent_thumb = $limit_thumb/$limit_use ; } //// Making THUMBNAIL /////// $img['width'] = $limit_use > $limit_thumb ? $data['image_width'] * $percent_thumb : $data['image_width'] ; $img['height'] = $limit_use > $limit_thumb ? $data['image_height'] * $percent_thumb : $data['image_height'] ; // Configuration Of Image Manipulation :: Dynamic $img['thumb_marker'] = '_thumb-'.floor($img['width']).'x'.floor($img['height']) ; $img['quality'] = '100%' ; $img['source_image'] = $source ; $img['new_image'] = $destination_thumb ; // Do Resizing $this->image_lib->initialize($img); $this->image_lib->resize(); $this->image_lib->clear() ; ////// Making MEDIUM ///////////// $img['width'] = $limit_use > $limit_medium ? $data['image_width'] * $percent_medium : $data['image_width'] ; $img['height'] = $limit_use > $limit_medium ? $data['image_height'] * $percent_medium : $data['image_height'] ; // Configuration Of Image Manipulation :: Dynamic $img['thumb_marker'] = '_medium-'.floor($img['width']).'x'.floor($img['height']) ; $img['quality'] = '100%' ; $img['source_image'] = $source ; $img['new_image'] = $destination_medium ; // Do Resizing $this->image_lib->initialize($img); $this->image_lib->resize(); $this->image_lib->clear() ; } else { echo "Failed!" ; } } } ?> |
Contoh hasil :

Ukuran Asli : 260 x 389

Ukuran Medium :: 133 x 200
Ukuran Thumbnail :: 60 x 90
Referensi :
http://www.codeigniter/user_guide/libraries/image_lib.html
Disclaimer :
Contoh gambar diambil dari Photo Album Suzuki Airi – Clear tanpa seizin dan pemberitahuan dari pihak penyedia pemegang lisensi photo/album. Peace![]()


Wah sungguh bermanfaat sekali… thank’s bro… saya pakai… ilmu mu ini… untuk kerincifm.com… ntar klu ada apa2.. saya boleh nanya… ya bro
@rudi : Silakan, bro
ijin ikut belajar bro…:d
Koleksi Fotonya bagus, boleh minta ga
.
subhanalloh.. ^^
keren nih..
kebetulan saya lagi perlu resize image juga.. tks bro
iya koleksi fotonya juga keren, mao dunks..
Memang bener2 enak ya klo pake CI. Aku juga baru pake dan lagi perlu script uploading dan resize eh malah ketemu disini. Dan enaknya lagi ternyata di user guide sdh disiapkan semua toh. weleh2 jadi makin cinta nih sana code ignater.
Good tutor my friend, keep rocking
[...] Untuk keperluan ini, Freddy Yuswanto membagi pengetahuannya berupa solusi untuk itu. Keterangan yang mudah dipahami ini bisa dilihat di postingnya: http://kohaci.com/2008/12/14/image-resizing-di-php-codeigniter.html [...]
mantap tutornya, Pak.
Biar saya ga lupa saya catat link posting ini di blog catatan saya.
thx.
Wow !!! =p =o Airi is Back ! =D
om saya coba tes scriptnya error om:
Fatal error: Call to undefined function form_open_multipart() in D:\UsbWebserver\Root\mulusproject\upload_form.php on line 7
maksudnya apa ya om?
udah diload belum helper ‘fom’ : $this->load->helper(array(‘form’, ‘url’)); atw $this->load->helper(‘form’); di controllernya. klw udah dan ternyata tetap tidak bisa ganti aja baris ke-7 menjadi :
tengkiuw bos….muantab…..
x lagi tengkiuw mg ilmu ny bermanfaat…………….
Makasi Brow mantap…GBU ^_^
mas,, ToLong dUnk,, dah di coba?? eror di upload_form Line ke 7
Gimana cara nya?? helP me??
AssalamU…
saya sudah coba praktekin yang di tanyak sama Irfan di atas,,
Line ke 7 upload_form nya sudah saya ganti Mas,, tapi masI errOr
jugak,,, kenapa ya mas…
tolong di jawab yacH?^^..
@lana :
Di file upload.php (controller) ,apa udah disertakan kode
public function __construct() { parent::Controller(); $this->load->helper(array('form', 'url')); }klw sudah dan tetap tidak mau ganti yang ada di line 7 upload_form.php,
form_open_multipart('upload/do_upload')menjadi :
wah keren..
sangat bermanfaat
Saya sudah hampir gila nih mas…
Mencoba berbagai macam cara upload lewat CI nggak pernah berhasil.
Tapi berhasil jika menggunakan Script upload PHP biasa.
saya sudah melakukan debugging juga untuk mengecek direktori, hasilnya valid.
Tapi jika menggunakan ini :
$data = $this->upload->data();
echo “Nama File : “.$data['file_name'];
Hasilnya kosong :
Nama File : [kosong]
Salah dimana script saya mas?
Helper dan library yg bersangkutan juga sudah saya load semua.
@f1dz :
ada beberapa kemungkinan :
1. tipe file yang diupload tidak sesuai ($config['allowed_types'])
2. path direktori upload, contoh :
alamat url sistem : http://localhost/tes/
akan dimasukkan ke folder “upload” yg di url kan jadi http://localhost/tes/upload/
cara lain selain didefinisikan
$config['upload_path'] = “./uploads/”;
adalah :
$config['upload_path'] = $_SERVER["DOCUMENT_ROOT"] . “/tes/uploads/”;
coba aja, semoga bisa
Tutorial yang sangat bermanfaat mas!
oya klo mau nampilin gambar yang uda di upload berdasarkan namanya yang ada di tabel gmn ya mas?
misal ada nama aset: gas compressor di tabel aset.disitu jg ada fotonya (entah di webserver/di tabel disimpan sbg BLOB).kalo aq mau nampilin foto gas compressor ya foto yang gas compressor yang keluar.gmn mas ada solusi?
terima kasih.
@ari :
untuk BLOB bisa dilihat di cek di link ini.
kalau simpan gambarnya di web server tinggal panggil nama filenya yang telah disimpan di database.
CMIIW.
Kalau mau nambahin crop sekalian gimana ya?
yang crop yang sudah diresize pertama, yang Ukuran Medium :: 133 x 200.
jadi saya mau punya gambar yang paling kecil(thumbnail) itu gambar hasil crop, bukan resize lagi.
Thanks b4….
@IzC :
jika hasil crop nya itu didapat dari hasil resize ke ukuran medium, pada proses ukuran medium edit “$img['thumb_marker']“ menjadi none. setelah itu tambahkan baris berikut setelah proses resize medium :
Semoga membantu.
Bisa minta file download nya tidak ?
Yang ada crop sekaligus itu.
Thanks……
Untuk crop jadi 150×150, lalu posisi crop nya center gimana ya?
diambil dari source gambar yang medium.
thanks
Atau tulis tutorial saya gan…
resize + crop,
crop nya center ukuran 150×150.
[...] saya kali ini menyambung dari tulisan saya terdahulu tentang Image Resizing di PHP CodeIgniter , jika sebelumnya library yang saya gunakan adalah bawaan dari CodeIgniter, kali ini saya akan [...]
@IzC : dapat dibaca di link ini . Semoga bermanfaat.
mas, uploadnya sudah jalan tetapi cuma masuk di folder real dan gambarnya masih dalam size yang aslinya. mohon pencerahanya..
@fadhil :
ada kemungkinan library GD2 nya belum diinstall di php nya. coba dicek di phpinfo() .
mas mau tnya klau membuat download gmna
jika nama filenya itu sudah masuk ke database…
kan klau aturan dari uer guidenya sintaknya kaya gini
function testdownload(){
$this->load->helper(‘download’);
$data = file_get_contents(“userfiles/contoh.az”);
$name = ‘fileku.az’;
force_download($name, $data);
}
nah di viewnya sintakny gmna??
terus gimna tuh jika nama file yang diupload itu bisa didownload berdasarkan id table yang ada di database..
@firman :
class Test extend Controller {
//… constructor
function directory() {
echo anchor(‘test/file/1′,’download here’) ;
}
function file($file_id) {
$ambil_file_di_db = $this->db->query(“SELECT filename FROM table_A WHERE id = ‘$file_id’” ) ;
$fetch_file_di_db = $ambil_file_di_database->row() ;
$file_di_db = $fetch_file_di_db->filename ;
$this->load->helper(‘download’);
$data = file_get_contents(“userfiles/”.$file_di_db);
$name = ‘fileku.az’;
force_download($name, $data);
}
}
buka browser jalankan di alamat /test/directory/ , klik link yang ada di direktori. kira2 seperi itu implementasinya.
CMIIW.
salam kenal mas, saya mau tanya ne, kalo file yg udah diupload tadi trus kita mau hapus nya gmn caranya mas?saya udah coba pake fungsi delete_files dari file helper nya code igniter tapi belum bisa juga,trus saya coba pake fungsi php unlink ttp belum bisa juga mas.. mohon pencerahannya ya mas…
terima kasih
@budi :
paling aman adalah lokasi file (directory root bukan url root) yang akan dihapus ditulis lengkap.
sebagai contoh :
misalkan lokasi nama file yang ingin dihapus image.jpg berada di url http://localhost/website/upload/image.jpg
maka bisa dipastikan directory rootnya berada di :
$_SERVER['DOCUMENT_ROOT'].’/website/upload/image.jpg’
dikodekan dengan :
CMIIW.
bro trus gimna caranya supaya imagenya tersimpan di database, jadi nanti di bagian artikel tinggal manggil gambar sesuai dengan nama atau title nya si artikel. thanks bro
@pemulaxx :
di line 35, ada variable $data['file_name'] , itu adalah nama file image nya, tinggal disimpan nama filenya didatabase .
$db['file_img'] = $data['file_name'] ;
$this->db->insert($table,$db) ;
pemanggilannya sesuaikan dengan ukuran imga yang mau ditampilkan, jika thumbnail yang lokasi foldernya di “./uploads/thumbnail/” berarti “./uploads/thumbnail/”.$nama_file_image .
Akhirnya bikin script sendiri saya boss.
Nyari2 nggak ada yg cair.
Di cairin sendiri deh…
mz,,, saya udah buat form sebelumnya. form saya itu mw saya tambah’i menu buat upload gambar. Praktikum ini sudah saya coba, tetapi sama sekali tidak muncul hasil.
@natali :
kemungkinan :
- folder lokasi upload nya , di contoh ada di line 34 – 37 .
- versi CI udah tidak sesuai (tulisan ini dimuat tahun 2008 masih pakai CI 1.7
- update terbaru di : http://kohaci.com/2010/10/24/image-manipulation-with-image_moos-library-codeigniter.html
mohon pencerahannya kalo setelah direzise trus mau diupload kedatabase bagaimana caranya ya ?
jadi thumnail , medium dan source aslinya mau saya masukan kedalam tabel foto row thumbnail , medium dan source .
karena saya mau buat link dari thumbnail , nah kalo diklik akan menampilkan medium dan real sizenya gitu .
terimakasih sebelumnya
untuk menampilkan ke 3 gambarnya gmn y?saya hanya bisa memanggil 1 gambar saja,yaitu gambar asli.sedangkan gambar resizenya tdk bisa