واکنون ایزی گرام 3 | ایزی گرام 3 با کلی امکانات جدید منتشر شد | کلیک کنید

آموزش Blur کردن عکس در اندروید به دو روش

دسته‌بندی: آموزش
شهریور ۲۲, ۱۳۹۷

آموزش Blur کردن عکس در اندروید به دو روش

در این مقاله دو روش Blur کردن عکس در اندروید استودیو آموزش داده خواهد شد. و در پایان به بررسی تفاوت های کلی این دو روش پرداخته می شود. با ما همراه باشید تا به راحتی Blur کردن عکس در اندروید را بیاموزید.

روش اول Blur کردن عکس در اندروید

در این روش از کتابخانه ویژه ای برای Blur کردن عکس در اندروید استفاده نمی شود و تنها با کمک گرفتن از کلاس سفارشی که ایجاد می کنیم Blur کردن عکس در اندروید صورت می گیرد.تصویری که در ادامه آورده شده است پیش نمایشی از این کار خواهد بود.

Blur کردن عکس در اندروید

در اغاز باید وارد فایل Build.gradle از نوع Module بشویم و کدهای زیر را به آن اضافه نماییم.

defaultConfig {
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
}

سپس پروژه را sync نمایید.

پس از این باید یک کلاس جاوا به نام Bluer.java ساخته و کد های زیر را به آن اضافه کنید.

import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;

public class Bluer {
private static final float SCALE = 0.5f;
private static final float BLUR_RADIUS = 10f;

public static Bitmap blur(Context context, Bitmap image){
int height = Math.round(image.getHeight() * SCALE);
int width = Math.round(image.getWidth() * SCALE);
Bitmap inputBitmap = Bitmap.createScaledBitmap(image,width,height,false);
Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);
RenderScript renderScript = RenderScript.create(context);
ScriptIntrinsicBlur intrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
Allocation tmIn = Allocation.createFromBitmap(renderScript, inputBitmap);
Allocation tmOut = Allocation.createFromBitmap(renderScript, outputBitmap);
intrinsicBlur.setRadius(BLUR_RADIUS);
intrinsicBlur.setInput(tmIn);
intrinsicBlur.forEach(tmOut);
tmOut.copyTo(outputBitmap);
return outputBitmap;
}
}

توضیح کدهای بالا

کار کلاسی که در بالا آورده شده است Blur کردن عکس در اندروید می باشد البته عکس ابتدا باید به bitmap تبدیل شود و سپس blur شود در قسمت قبل ما یک void ایجاد نمودیم که دو مقدار ورودی دارد اولی context و دومی عکس Bitmap که در ادامه شرح می دهیم چه گونه می توان از عکس Png یا Jpg معادل bitmap آن را ایجاد نمود.

 

پس از این  اندازه تصویر از bitmap استخراج شده (منظور از اندازه همان طول و عرض تصویر است) و با استفاده از کلاس RenderScript عمل blur سازی انجام می شود و در آخر void ما یک bitmap را return خواهد نمود.

 

حال یک layout ساخته و نام آن را (activity_main.xml) قرار دهید (همچنین می توانید  از layout های خودتان نیز استفاده نمایید ) ، سپس خط های زیر را در آن قرار دهید.

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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"
>

<ImageView
android:layout_width="250dp"
android:layout_height="250dp"
android:id="@+id/originalImage"
android:layout_marginTop="20dp"
android:layout_centerHorizontal="true"
android:src="@drawable/picture"/>

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/outputImage"
android:layout_below="@+id/originalImage"
android:layout_marginTop="20dp"
android:layout_centerHorizontal="true"/>

</RelativeLayout>

 

اکنون ما دو  ImageView خواهیم داشت که یکی از آنها آیدی آن  originalImage است و عکس اصلی ما است و در ImageView دوم نتیجه ImageView اول که Blur شده قرار گرفته است.

 

بعد از این مرحله  در اکتیویتی مربوطه کدهای زیر را می گذاریم.

 

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView outputImage = (ImageView)findViewById(R.id.outputImage);
Bitmap outputBitmap = Bluer.blur(this, BitmapFactory.decodeResource(getResources(),R.drawable.picture));
outputImage.setImageBitmap(outputBitmap);
}
}

 

پس از این در این مرحله تصویر را از پوشه drawable فرا خوانده و به Bitmap تبدیل می کنیم و بعد از آن با استفاده از همان کلاسی که خودمان تولید نمودیم عکس را blur می کنیم و در ImageView می گذاریم.

همچنین ببینید :   آموزش ساخت Toggle Button در اندروید

 

روش دوم  Blur کردن عکس در اندروید

در روش قبلی شما به صورت کامل نمی توانید بروی Blur کردن ImageView تسلط داشته باشید در ادامه می توانید پیشنمایشی از Blur کردن عکس در اندروید را مشاهده نمایید.

 

Blur کردن عکس در اندروید

 

همانطور که می بینید در این روش کنترل بیشتری بر Blur کردن عکس در اندروید خواهید داشت.  البته عکس پشتی این نمونه Blur شده است. از ویژگی های مثبت این کتاب خانه پشتیبانی از Api 14 به بالا می باشد بنابراین بدون هیچ مشکلی قادر خواهید بود  آن را به پروژه خود اضافه نمایید حجم این کتاب خانه حدودا برابر با ۱۰ کیلوبایت می باشد که چندان زیاد نمی باشد.

 

افزودن کتابخانه به پروژه

برای اضافه کردن این کتابخانه در آغاز باید وارد فایل Build.gradle از نوع Module شده بعد در بخش dependencies خط کد زیر را اضافه نمایید.

 

compile 'com.jackandphantom.android:blurimage:1.2.0'

 

بعد از آن در تگ defaultConfig دو خط زیر را اضافه نمایید.

 

renderscriptTargetApi 19
renderscriptSupportModeEnabled true

 

وارد فایل Build.gradle از نوع Top-Level بشوید و بعد از آن در قسمت repositories خط کد زیر را قرار دهید. کتاب خانه بالا در منبع Jitpack است و  باید حتما خط زیر را قرار دهید.

 

maven { url 'https://jitpack.io' }

 

شما می توانید به این شکل آن را لود نمایید.

 

BlurImage.with(getApplicationContext()).load(R.drawable.myImage).intensity(20).Async(true).into(imageView);

 

یا با استفاده از bitmap می توانید با کد زیر آن را لود نمایید.

 

BlurImage.with(getApplicationContext()).load(bitmap_Image).intensity(20).Async(true).into(imageView);

 

اگر تمایل دارید که به صورت Synchronous عکس شما لود شود مقدار Async را برابر با false و اگرتمایل دارید که به صورت ASynchronous لود شود مقدار True را در Async قرار دهید.

اگر هدف شما این است که یک عکس bitmap از کتاب خانه دریافت کنید یعنی یک عکس را Blur شود و در فرمت Bitmap به شما داده شود لازم است که از کد زیر استفاده نمایید.

 

Bitmap bitmap = BlurImage.with(getApplicationContext()).load(R.drawable.mountain).intensity(20).Async(true).getImageBlur();

برای مثال از کد زیر استفاده نمایید.

ImageView imageView = findViewById(R.id.imageblur);
Bitmap bitmap = BlurImage.with(getApplicationContext()).load(R.drawable.ankit).intensity(15).getImageBlur();
imageView.setImageBitmap(bitmap);

 

در این مرحله آموزش ما به پایان رسیده است. امیدوارم از این دو روش Blur کردن عکس در اندروید نهایت استفاده را برده باشید.

 

به طور کلی از این دو روش می توان نتیجه گرفت که روش دوم کامل تر و مناسب تر است. چرا که می توان بر روی Blur کردن عکس در اندروید  تسلط بیشتری داشته و کتابخانه در آن آماده است و در کل Blur کردن عکس در اندروید  ساختار بهتری با روش دوم خواهد داشت. اگر چه روش اول نیز می توان با کد نویسی یک کتابخانه مجزا ساخت اما در صورت استفاده از روش دوم Blur کردن عکس در اندروید به دلیل سریعتر بودن و بیشتر بودن امکانات در نظر گرفته شده به مراتب بیشتر ترجیح داده می شود.

پیام بگذارید


تومان