Android-এ Glide লাইব্রেরি ব্যবহার করে ইমেজ বিটম্যাপ হিসেবে ডাউনলোড করা
Glide (by Bump Technologies) হলো একটি দ্রুত এবং কার্যকর ইমেজ লোডিং লাইব্রেরি যা মিডিয়া ডিকোডিং, মেমরি/ডিস্ক ক্যাশিং, এবং রিসোর্স পুলিং অপ্টিমাইজ করে। এটি বিশেষ করে Bitmap অবজেক্ট হিসেবে ইমেজ পাওয়ার জন্য উপযোগী।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন এবং ডিপেন্ডেন্সি যোগ করুন
build.gradle (Module: app) ফাইলে নিম্নলিখিত ডিপেন্ডেন্সিগুলি যোগ করুন:
dependencies {
// Glide नवীনतम ভার্সন (আপনার Gradle ভার্সন অনুযায়ী)
implementation 'com.github.bumptech.glide:glide:4.16.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
// Kotlin-এ ব্যবহার করলে
// kapt 'com.github.bumptech.glide:compiler:4.16.0'
}
ধাপ ২: লেআউট ফাইল (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:contentDescription="Glide-এ লোড করা ছবি" />
</RelativeLayout>
ধাপ ৩: MainActivity.java-এ Glide ব্যবহার করে Bitmap-এ লোড করুন
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
String imageUrl = "https://www.google.es/images/srpr/logo11w.png";
// পদ্ধতি ১: CustomTarget ব্যবহার করে Bitmap পাওয়া (প্রস্তাবিত)
Glide.with(this)
.asBitmap() // Bitmap হিসেবে লোড করুন
.load(imageUrl)
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource,
@Nullable Transition<? super Bitmap> transition) {
// Bitmap প্রস্তুত - এখন ইচ্ছেমতো ব্যবহার করুন
imageView.setImageBitmap(resource);
// উদাহরণ: বিটম্যাপ সংরক্ষণ, শেয়ার করা, বা প্রসেস করা
// saveBitmapToFile(resource);
Toast.makeText(MainActivity.this, "বিটম্যাপ লোড সম্পন্ন", Toast.LENGTH_SHORT).show();
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
// রিসোর্স ক্লিয়ার হলে (যেমন: ভিউ ডিটাচ হলে)
}
});
// পদ্ধতি ২: SimpleTarget ব্যবহার (পুরানো API, ডিপ্রিকেটেড নয় কিন্তু CustomTarget ভালো)
/*
Glide.with(this)
.asBitmap()
.load(imageUrl)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource,
@Nullable Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
});
*/
// পদ্ধতি ৩: লিসেনারসহ সরাসরি ImageView-এ লোড (বিটম্যাপ এক্সেস ছাড়া)
/*
Glide.with(this)
.load(imageUrl)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model,
Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model,
Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(imageView);
*/
}
}
Glide-এ Bitmap লোড করার উন্নত টেকনিক
১. নির্দিষ্ট আকারে Bitmap পাওয়া (ওভারসাইজড ইমেজ এড়াতে)
// কাস্টম আকারে (পিক্সেলে)
Glide.with(this)
.asBitmap()
.load(imageUrl)
.apply(new RequestOptions().override(800, 600)) // मैক্স ৮০০x৬০০
.into(new CustomTarget<Bitmap>() { ... });
// বা DP-এ (স্ক্রিন ডেন্সিটি অনুযায়ী)
.apply(new RequestOptions().override(
dpToPx(300), dpToPx(200)
))
২. ট্রান্সফরমেশন প্রয়োগ (বৃত্তাকার, ব্লার, রাউন্ডেড কর্নার)
import com.bumptech.glide.request.RequestOptions;
import jp.wasabeef.glide.transformations.BlurTransformation; // alibrary
import jp.wasabeef.glide.transformations.RoundedCornersTransformation;
// বিল্ট-ইন রাউন্ডেড কর্নার (Glide v4+)
Glide.with(this)
.asBitmap()
.load(imageUrl)
.apply(RequestOptions.bitmapTransform(new RoundedCorners(24))) // ২৪dp রাউন্ডেড
.into(customTarget);
// থার্ড-পার্টি লাইব্রেরি (glide-transformations) ব্যবহার করে
Glide.with(this)
.asBitmap()
.load(imageUrl)
.apply(RequestOptions.bitmapTransform(new BlurTransformation(25, 3)))
.into(customTarget);
৩. ক্যাশ কন্ট্রোল
// শুধু মেমরি ক্যাশ ব্যবহার করুন
Glide.with(this)
.asBitmap()
.load(imageUrl)
.apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.NONE))
.into(customTarget);
// শুধু ডিস্ক ক্যাশ
.apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.DATA))
// কোনো ক্যাশ না (ফরস রিফ্রেশ)
.apply(new RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true))
৪. থাম্বনেইল লোডিং (দ্রুত প্রিভিউ)
Glide.with(this)
.asBitmap()
.load(imageUrl)
.thumbnail(Glide.with(this).asBitmap().load(thumbnailUrl).apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.ALL)).sizeMultiplier(0.1f))
.into(customTarget);
৫. প্রিলোডিং (পূর্বে লোড করুন)
// RecyclerView-এ প্রিলোডের জন্য
Glide.with(fragment)
.asBitmap()
.load(urls.get(preloadPosition))
.preload(); // বা .preload(width, height)
গুরুত্বপূর্ণ: কনটেক্সট নির্বাচন (Context vs Activity vs Fragment)
| কনটেক্সট | লাইফসাইকেল | ব্যবহার |
|---|---|---|
Glide.with(activity) |
Activity লাইফসাইকেল | Activity ডেস্ট্রয় হলে অটো ক্যাঞ্চেল |
Glide.with(fragment) |
Fragment লাইফসাইকেল | Fragment ডেস্ট্রয় হলে অটো ক্যাঞ্চেল (প্রস্তাবিত) |
Glide.with(view) |
View.attach/detach | View ডিটাচ হলে ক্যাঞ্চেল |
Glide.with(context) |
Application লাইফসাইকেল | ম্যানুয়াল ক্যাঞ্চেল দরকার, লিক হতে পারে |
ধাপ ৪: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Bitmap সংরক্ষণ করা (ফাইলে লিখা)
CustomTarget-এ Bitmap পাওয়ার পর এটি ফাইলে সংরক্ষণ করতে পারেন:
private void saveBitmapToFile(Bitmap bitmap) {
Executors.newSingleThreadExecutor().execute(() -> {
try {
File file = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "glide_image_" + System.currentTimeMillis() + ".png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
runOnUiThread(() -> Toast.makeText(this, "ছবি সংরক্ষিত: " + file.getAbsolutePath(), Toast.LENGTH_LONG).show());
// গ্যালারিতে দেখানোর জন্য মিডিয়া স্ক্যান
MediaScannerConnection.scanFile(this, new String[]{file.getAbsolutePath()}, null, null);
} catch (IOException e) {
e.printStackTrace();
}
});
}
অ্যাপ্লিকেশন চালানোর পদ্ধতি
আপনার Android ডিভাইস কম্পিউটারের সাথে সংযুক্ত করুন। Android Studio-তে Run আইকনে ক্লিক করুন। Google লোগো Bitmap হিসেবে লোড होकर ImageView-এ দেখাবে।
