Android Resim Optimizasyon – Büyük Boyutlu Resimleri Optimize Etme

Android işletim sistemi gün geçtikçe gelişiyor fakat önceden kullanılan telefonların günümüzdeki telefonlara kıyasla çok daha yavaş ve ağır kaldığı gözlemlenebilir. Eğer bir geliştiriciyseniz cihazın stabilizasyonundan da sorumlu hale geliyorsunuz.

– GLIDE

Glide kütüphanesi resmi istediğiniz kısımdan almanıza ve kullanıcıya sunmanıza olanak sağlar. Uygulamanın sürekliliği ve ram dostu olabilmesi için en yararlı kütüphanelerden birisi.

– Kurulum

build.gradle dosyasına dependencies içerisine kütüphaneleri ekliyoruz.

implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'jp.wasabeef:glide-transformations:2.0.2'

Ardından projeyi build ederek kütüphaneleri projemize eklemiş oluyoruz.

Kullanım

Öncelikle Glide kütüphanesini kullanacağımız util dosyamızı yazıyoruz.

GlideUtil.java

public class GlideUtil {

    /***
     * Url ile internet üzerinden resim getirme.
     */
    public static synchronized void glide_use(Context context , String url , final ImageView imageView ){
        Glide.with(context)
                .load(url)
                .fitCenter()
                .crossFade()
                .into(imageView);
    }

    /***
     * Drawable dosyasından resim getirme.
     */

    public static synchronized void glide_use(Context context , int resource , ImageView imageView){
        Glide.with(context)
                .load(resource)
                .fitCenter()
                .crossFade()
                .into(imageView);
    }

    /***
     * Resmi daire şeklinde kırpma.
     */

    public static synchronized void glideTransform(Context context , int resource , ImageView imageView){
        Glide.with(context)
                .load(resource)
                .fitCenter()
                .bitmapTransform(new CropCircleTransformation(context))
                .crossFade()
                .into(imageView);
    }

    /***
     * Resmi boyutlandırma
     */

    public static Bitmap glideResize(Context context , String url , int widht , int height){
        try {
            return Glide.with(context)
                    .load(url)
                    .asBitmap()
                    .dontAnimate()
                    .fitCenter()
                    .priority(Priority.LOW)
                    .override(widht,height)
                    .into(widht,height).get();
        } catch (InterruptedException e) {
            e.printStackTrace();
            return null;
        } catch (ExecutionException e) {
            e.printStackTrace();
            return null;
        }
    }
}

Tasarım dosyamıza ImageView’leri yerleştirelim.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="100"
    tools:context="com.imageoptimize.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:weightSum="100"
        android:layout_weight="50">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="50">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/get_url_image"
                android:gravity="center"/>

            <ImageView
                android:id="@+id/activity_main_imgGetUrl"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="fitCenter"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="50">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/get_drawable_file"
                android:gravity="center"/>

            <ImageView
                android:id="@+id/activity_main_imgGetDrawable"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="fitCenter"/>

        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:weightSum="100"
        android:layout_weight="50">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="50">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/set_crop_circle"
                android:gravity="center"/>

            <ImageView
                android:id="@+id/activity_main_imgSetCropCircle"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="fitCenter"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_weight="50">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/set_resize_ımage"
                android:gravity="center"/>

            <ImageView
                android:id="@+id/activity_main_imgOptimize"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="fitCenter"/>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

Şimdi ise java dosyamızda glide kütüphanesi yardımıyla optimize edilmiş resimlerimizi ImageView’lere set edelim.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private ImageView imgGetUrl , imgGetDrawable , imgCropCircle , imgOptimize;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init(); // ImageView'leri tanımladık.

        getUrlImage(); // İnternet ile resim getiren kod. internet iznini unutmayın. android.permission.INTERNET!
        getDrawableImage(); // Uygulama klasöründeki resim.
        getCropCircleImage(); // Resmi kırpma.
        getOptimizeImage(); // Resmi küçültme.
    }

    private void init(){
        imgGetUrl = (ImageView) findViewById(R.id.activity_main_imgGetUrl);
        imgGetDrawable = (ImageView) findViewById(R.id.activity_main_imgGetDrawable);
        imgCropCircle = (ImageView) findViewById(R.id.activity_main_imgSetCropCircle);
        imgOptimize = (ImageView) findViewById(R.id.activity_main_imgOptimize);
    }

    private void getUrlImage(){
        String imageUrl = "https://www.webdeyazilim.com/wp-content/uploads/2017/11/iphone-x-970x580.jpg";

        GlideUtil.glide_use(MainActivity.this , imageUrl , imgGetUrl);
    }

    private void getDrawableImage(){
        int resource = R.drawable.iphone;

        GlideUtil.glide_use(MainActivity.this , resource , imgGetDrawable);
    }

    private void getCropCircleImage(){
        int resource = R.drawable.iphone;

        GlideUtil.glideTransform(MainActivity.this , resource , imgCropCircle);
    }

    private void getOptimizeImage(){
        String imageUrl = "https://www.webdeyazilim.com/wp-content/uploads/2017/11/iphone-x-970x580.jpg";

        new getOptimizeImage(imgOptimize,imageUrl).execute();
    }

    class getOptimizeImage extends AsyncTask<Bitmap,Bitmap,Bitmap>{
        private ImageView imageView;
        private String imageUrl;

        public getOptimizeImage(ImageView imageView , String url){
            this.imageView = imageView;
            this.imageUrl = url;
        }

        @Override
        protected Bitmap doInBackground(Bitmap... bitmaps) {
            return GlideUtil.glideResize(MainActivity.this , imageUrl , 100,100); // Optimize boyutu widht ve height ile belirledik.
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if (bitmap!=null){
                imageView.setImageBitmap(bitmap);
            }
        }
    }
}

Resimleri optimize ederek ve cihazı yormadan gösteren Glide kütüphanemizi bu makalemizde anlatmış olduk. Sorularınız için yorum bırakabilirsiniz.

Photo of author

Mehmet Kurtgöz

Android Developer.

Yorum yapın