Ana sayfa HEPSİ Android Resim Optimizasyon – Büyük Boyutlu Resimleri Optimize Etme

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

117
0

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üphenemizi bu makalemizde anlatmış olduk. Sorularınız için yorum bırakabilirsiniz.

BİR CEVAP BIRAK

Lütfen bir yorum yazın!
Lütfen Adınızı Girin!