mbah_bejo

Twibbon

Jan 11th, 2021
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.50 KB | None | 0 0
  1. /**
  2.  *  Class ini mengatur ukuran gambar yang masuk ke program.
  3.  *  menyesusaikan ukuran dari gambar yang akan ditampilkan
  4.  *  pada program
  5.  *
  6.  *  Author  : Thomas Dwi Awaka
  7.  *  Version : 1
  8.  */
  9.  
  10. package twibboner;
  11.  
  12. import java.awt.*;
  13. import java.awt.image.BufferedImage;
  14.  
  15. public class twibbon {
  16.  
  17.     static Image gambar;
  18.     static Image twbn;
  19.     static Image gambarJadi;
  20.     static int opacity;
  21.     static int ukuran;
  22.     static int posisi = 1;
  23.  
  24.     /**
  25.      * mengambil gambar yang sudah masuk diprogram
  26.      * @return hasil gambar
  27.      */
  28.     public static Image getGambar(){
  29.         return gambarJadi;
  30.     }
  31.  
  32.     /**
  33.      * method ini meng-update tampilan pada program
  34.      * setiap ada perubahan, seperti open/save foto
  35.      */
  36.     public static void update(){
  37.         // jika gambar dan twibbon sudah dimasukkan di program
  38.         if(gambar != null && twbn != null){
  39.  
  40.             BufferedImage image = (BufferedImage) gambar;
  41.  
  42.             // merubah ukuran gambar & twibbon untuk tampilan diprogram
  43.             BufferedImage overlay = resize((BufferedImage) twbn,  gambar.getWidth(null),
  44.                     gambar.getHeight(null));
  45.             BufferedImage hasil = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
  46.  
  47.             Graphics2D g = hasil.createGraphics();
  48.  
  49.             // foto di-draw pada program
  50.             g.drawImage(image, 0,0,null);
  51.  
  52.             // mengkomposisi elemen visual
  53.             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,(float) opacity/100));
  54.  
  55.             // sebagai penentu posisi twibbon/logo/watermark
  56.             if(posisi==1){ // tengah
  57.                 g.drawImage(overlay, gambar.getWidth(null)/2 - overlay.getWidth()/2,
  58.                         gambar.getHeight(null)/2 - overlay.getHeight()/2,null);
  59.             } else if(posisi==2) //atas kiri
  60.             {
  61.                 g.drawImage(overlay,50,50,null);
  62.             }
  63.             else if(posisi==3) //atas kanan
  64.             {
  65.                 g.drawImage(overlay,gambar.getWidth(null)-overlay.getWidth()-50,50,null);
  66.             }
  67.             else if(posisi==4) //bawah kiri
  68.             {
  69.                 g.drawImage(overlay,50,gambar.getHeight(null)-overlay.getHeight()-50,null);
  70.             }
  71.             else if(posisi==5)//bawah kanan
  72.             {
  73.                 g.drawImage(overlay,gambar.getWidth(null)-overlay.getWidth() - 50,
  74.                         gambar.getHeight(null)-overlay.getHeight() - 50,null);
  75.             }
  76.  
  77.             // hasil dari foto & twibbon masukkan ke gambarJadi
  78.             gambarJadi = hasil;
  79.         }
  80.         // jika hanya gambar saja yang diinput ke program
  81.         else if(gambar != null){
  82.             gambarJadi = gambar;
  83.         }
  84.     }
  85.  
  86.     /**
  87.      *
  88.      * @param gmbr file gambar atau twibbon
  89.      * @param lebar lebar dari gambar atau twibbon
  90.      * @param tinggi tinggi gambar atau twibbon
  91.      * @return
  92.      */
  93.     private static BufferedImage resize(BufferedImage gmbr, int lebar, int tinggi){
  94.         // jika gambar sudah dimasukkan
  95.         if(gmbr !=null){
  96.             // dimensi gambar di-resize
  97.             Dimension resizedDimensions = resize(gmbr.getWidth(),gmbr.getHeight(), lebar,tinggi);
  98.             lebar = (resizedDimensions.width * ukuran)/100;
  99.             tinggi = (resizedDimensions.height * ukuran)/100;
  100.  
  101.             //membuat gambar dengan lebar & panjang tertentu dengan kualitas smooth
  102.             Image tmp = gmbr.getScaledInstance(lebar,tinggi,Image.SCALE_SMOOTH);
  103.  
  104.             BufferedImage resized = new BufferedImage(lebar,tinggi,BufferedImage.TYPE_INT_ARGB);
  105.  
  106.             //membuat graphics2D untuk men-draw BufferedImage
  107.             Graphics2D graphics2D = resized.createGraphics();
  108.  
  109.             // men-draw gambar dari hasil tmp
  110.             graphics2D.drawImage(tmp, 0 , 0, null);
  111.             // untuk efisiensi saat penggunaan objek graphics
  112.             graphics2D.dispose();
  113.  
  114.             return resized;
  115.         }
  116.         //return null
  117.         return gmbr;
  118.     }
  119.  
  120.     /**
  121.      * method ini untuk merubah ukuran gambar dan twibbon
  122.      * sesuai dengan batas panjang & tinggi yang sudah di tentukan
  123.      * @param lebarAsli lebar gambar/twibbon yang asli
  124.      * @param tinggiAsli tinggi gambar/twibbon yang asli
  125.      * @param batasLebar batas lebar yang sudah ditentukan diprogram
  126.      * @param batasTinggi batas tinggi yang sudah ditentukan diprogram
  127.      * @return gambar atau twibbon yang sudah dirubah ukurannya
  128.      */
  129.     public static Dimension resize(int lebarAsli, int tinggiAsli, int batasLebar, int batasTinggi){
  130.         int lebarBaru = lebarAsli;
  131.         int tinggiBaru = tinggiAsli;
  132.  
  133.         // formula untuk merubah ukuran gambar/twibbon sesuai dengan batas lebar & tinggi
  134.  
  135.         if(lebarAsli > batasLebar){
  136.             lebarBaru = batasLebar;
  137.             tinggiBaru = lebarBaru * tinggiAsli / lebarAsli;
  138.         }
  139.         if(tinggiBaru > batasTinggi){
  140.             tinggiBaru = batasTinggi;
  141.             lebarBaru = tinggiBaru * lebarAsli / tinggiAsli;
  142.         }
  143.         if(lebarBaru == lebarAsli && tinggiBaru == tinggiAsli){
  144.             if(lebarBaru * tinggiAsli / lebarAsli > tinggiBaru * lebarAsli/ tinggiAsli){
  145.                 tinggiBaru = batasTinggi;
  146.                 lebarBaru = tinggiBaru *  lebarAsli / tinggiAsli;
  147.             } else{
  148.                 lebarBaru = batasLebar;
  149.                 tinggiBaru = lebarBaru * tinggiAsli / lebarAsli;
  150.             }
  151.         }
  152.         return new Dimension(lebarBaru,tinggiBaru);
  153.     }
  154. }
Add Comment
Please, Sign In to add comment