KATEGORI: PEMROGRAMAN PYTHON
Pengambilan gambar layar lalu kirim dengan menggunakan FTP
Sebuah cara untuk mengambil gambar layar secara berulang dan mengirimkan filenya ke FTP Server beserta dengan penamaan waktu yang sesuai.
Disclaimer: I am not responsible for uses intended for crime!
Biasanya sih disebut screenshot, sudah banyak sekali aplikasi laptop maupun mobile yang serupa bahkan lebih bagus dari program yang akan kita buat sekarang. Tapi kalian sering merasa capek ga sih kalau ambil screenshot yang bejibun banyaknya. Bisa nih programnya dipake buat kerjaan itu juga.
Setelah screenshot juga program ini dapat mengirimkannya ke salah satu mesin menggunakan komunikasi FTP, kalau lebih advancednya lagi bisa kita buat program ini berjalan otomatis ketika mesin baru dinyalakan (tanpa diketahui), bakal dibuat part 2 nya deh kayaknya.
Kita bakal gunain python 3.8, jika milik kalian berbeda tinggal sesuaikan saja ya. Jadi saya bakal kasihtau dulu apa aja sih fitur-fiturnya;
· Mengambil gambar layar secara berulang.
· Mengambil gambar layar dalam jeda waktu tertentu.
· Menyimpan file hasil penangkapan gambar layar disertai waktunya.
· Mengirim file ke FTP Server ketika gambar baru disimpan.
1. Mengimpor Modul
Ada 4 modul yang akan digunakan, kita bahas dari yang pertama. Modul wx akan berguna untuk membangun aplikasi GUI(Graphical User Interface), nah kali ini kita bakal pake dia untuk mengambil ukuran resolusi layar dan mengambil gambar layar.
Lalu modul OS pada program ini membantu untuk mengidentifikasi kesalahan nama file dan kegagalan proses. Modul ftplib akan membantu kita membuat sesi ke FTP Server dan mengirim file, adalagi terakhir modul time yang berguna untuk menyimpan nama file disertai waktu saat memprosesnya.
Modul-modul ini masih banyak digunakan untuk kebutuhan yang lain, tapi karena kita hanya membahas kegunaan di program ini maka jadi sedikit.
2. Membuat fungsi untuk mengambil gambar layar
Bahas pelan-pelan ya, emang agak panjang sih. Variabel app akan menyiapkan semua kebutuhan untuk penggunaan aplikasi GUI dengan wx, dari dokumentasinya sih dinyatakan bahwa setiap aplikasi wx harus memiliki wx.App() tunggal.
Variabel screen menyimpan semua informasi layar, lalu variabel size akan mengambil nilai ukuran layar dari variabel screen tadi. Kalau bingung tampilkan saja outputnya dengan menambahkan baris print(size) dibawah baris variabel size, maka ketika dijalankan nanti terlihat resolusi layar desktop kalian.
Variabel bmap itu untuk menyimpan titik-titik gambar asli lalu variabel memo akan bertugas untuk menggambar dan memberi pewarnaan berdasarkan objek dari variabel bmap, boleh klik disini untuk memahami apa itu bitmap.
Setelah itu fungsi memo.Blit() hadir untuk menyalin data yang sudah diproses oleh variabel memo menjadi ukuran yang lebih spesifik. Contohnya jika kita ingin memotong gambar juga bisa, tapi nggk akan kita lakukan karna gambar layar ukuran penuh dibutuhkan. Kalian pasti bingung melihat angka-angka yang ada didalam fungsi memo.blit(). Jadi sintaxnya seperti ini;
Blit(self, xdest, ydest, width, height, source, xsrc, ysrc, logicalFunc=COPY, useMask=False, xsrcMask=DefaultCoord,ysrcMask=DefaultCoord)
Note: Huruf berwarna hitam tebal berarti variabel itu yang digunakan.
Terakhir, del app,memo yang berarti kita menghapus variabel app dan memo dikarenakan program ini diperlukan untuk terus memperbarui gambar layar. Jika tidak dihapus maka gambar layar yang nanti disimpan tidak berubah sama sekali.
3. Menyimpan objek yang dibutuhkan kedalam variabel
Kita bahas baris-perbaris ya, oke langsung aja. Variabel sleep akan meminta masukkan angka/interger dari user untuk menghitung jeda waktu pengambilan gambar layar. Begitu juga server_ip yang akan meminta IP address dari FTP Server (tempat penyimpanan file gambar layar). Outputnya kira-kira seperti dibawah ini;
Sekarang kita lanjut lagi membahas baris selanjutnya yaitu realtime yang akan menyimpan waktu saat program memproses semua fungsi. Misalkan kalian menjalankannya pada waktu 08:53:10, dan karena ada variabel sleep yang melakukan jeda waktu 5 detik, maka ketika program memproses untuk kedua kalinya waktunya akan menjadi 08:58:10. Begituhlah kira-kira, kalau masih bingung klik disini;
Gunanya di program ini untuk menyimpan file beserta waktu saat simpannya, seperti di gambar;
Lalu variabel session_ akan membuat sesi komunikasi antara server FTP dan komputer kita, sintaxnya seperti ini;
ftplib.FTP(host=’’, user=’’, passwd=’’, acct=’’, timeout=None, source_address=None)
Note: Huruf berwarna hitam tebal maksudnya variabel tersebut yang kita tambahkan nilai/valuenya.
Variabel realtime hadir untuk mengubah nilainya agar dapat dieksekusi oleh sistem operasi, kalian bisa menambahkan pagar(#) di sebelum variabel tersebut untuk mengetahui perbedaanya.
4. Mengambil screenshot secara berulang-ulang sesuai jumlah yang ditentukan
Banyak nih, saya asumsikan bahwa kalian sudah mengerti cara kerja for loop (perulangan). Fungsi range akan menyimpan angka dari 1–100, kalau ingin diubah kalian bisa lihat sintaxnya dibawah ini;
class range(start, stop[, step])
Note: Huruf berwarna hitam tebal berarti variabel tersebut yang ditambahkan nilai/valuenya.
Kedua, kita memanggil fungsi takeSS() yang sudah kalian buat dilangkah pertama. Lalu bmap.SaveFile() akan menyimpan file hasil tangkapan layar. Setelah itu kita akan membuka filenya yang disimpan pada variabel file_.
Setelah dari ketiga proses diatas, maka saatnya untuk mengirim file dengan session_storbinary(), sintaxnya seperti dibawah;
FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)
Note: Huruf berwarna hitam tebal maksudnya variabel tersebutlah yang ditambah nilai/valuenya.
Jika sudah selesai dikirim maka akan di tutup dengan menggunakan fungsi file_.close(), lalu hadirnya time_sleep(sleep) untuk menjeda waktu pengambilan dan menyimpan gambar, jika kurang paham bisa klik disini.
5. Menghancurkan sesi FTP
Terakhir, setelah proses perulangan (for loop) selesai maka kita akan menyelesaikannya dengan var.quit(). Bisa klik disini untuk mengetahui lebih lanjut.
Tips Newbyiee
Saya yakin kalian tidak sepenuhnya paham dengan maksud tulisan diatas, tapi saya berterimakasih kalau kalian masih berusaha memahaminya. Berikan print pada setiap fungsi-fungsi penting yang kalian ingin ketahui, tips ini manjur buat saya menjadi lebih paham pada proses dari setiap barisnya.
Program ini masih jauh dari kata sempurna, mungkin juga belum bisa disebut clean code. Tapi untuk tutorial ataupun bedah kode selanjutnya saya tetap akan berusaha dan belajar menjadi lebih baik lagi, agar kalian para pembaca setia dan saya juga cerdas bersama-sama.
“Learn then share”