Android: cree filtros de imagen como Instagram usando Kotlin

Muchas aplicaciones de redes sociales en la actualidad ofrecen una función dentro de su aplicación para editar fotos aplicándoles algunos filtros hermosos y haciéndolas más hermosas. Podemos llegar a ver este tipo de filtros en Instagram y Snapchat. En este artículo, crearemos una aplicación en la que agregaremos filtros de imagen de Instagram a nuestra imagen en Android usando Kotlin.

Nota : si está buscando crear esta aplicación en Android usando Java. Cómo construir filtros de imagen como Instagram en Android usando Java

Implementación paso a paso

Paso 1: crea un nuevo proyecto en Android Studio

Cómo crear/iniciar un nuevo proyecto en Android Studio

Paso 2: agregue la dependencia y el repositorio de JitPack

Navegue a Gradle Scripts > build.gradle(Module:app) y agregue la siguiente dependencia en la sección de dependencias.  

implementation 'com.github.mukeshsolanki:photofilter:1.0.2'

Agregue el repositorio de JitPack a su archivo de compilación. Agréguelo a su root build.gradle al final de los repositorios dentro de la sección allprojects{ }.

allprojects {
repositories {
  …
  maven { url “https://jitpack.io” }
    }
}

Después de agregar esta dependencia, sincronice su proyecto y ahora avanzaremos hacia su implementación.  

Paso 3: agregar una imagen a la carpeta dibujable

Copie su imagen y luego navegue a la aplicación> res> carpeta dibujable. Haga clic derecho sobre él y péguelo para agregar su imagen a la carpeta dibujable. 

Paso 4: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml. 

XML

<?xml version="1.0" encoding="utf-8"?>
<!--on below line we are creating a swipe to refresh layout-->
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
  
    <!--Imageview for our original image-->
    <ImageView
        android:id="@+id/idIVOriginalImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/idHSV"
        android:layout_centerHorizontal="true"
        android:layout_margin="20dp"
        android:padding="5dp"
        android:src="@drawable/dog" />
  
    <!--horizontal scroll view for displaying
        all our image filters-->
    <HorizontalScrollView
        android:id="@+id/idHSV"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="20dp"
        android:scrollbars="none">
  
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
  
            <!--We are creating a linear layout for displaying 
                each item in horizontal scroll view-->
            <LinearLayout
                android:id="@+id/idLLVignette"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <!--We are displaying the image view how it
                    will look after applying the filter-->
                <ImageView
                    android:id="@+id/idIVOne"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <!--Text view for displaying our filter name-->
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 1"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLTint"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVTwo"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 2"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLTemperature"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVThree"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 3"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLSharpen"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVFour"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 4"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLSepia"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVFive"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 5"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLSaturate"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVSix"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 6"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLRotate"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVSeven"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 7"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLPosterize"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVEight"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 8"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLNone"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVNine"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 9"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
            <LinearLayout
                android:id="@+id/idLLNegative"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:orientation="vertical">
  
                <ImageView
                    android:id="@+id/idIVTen"
                    android:layout_width="140dp"
                    android:layout_height="140dp"
                    android:layout_gravity="center"
                    android:src="@drawable/dog" />
  
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="4dp"
                    android:text="Filter 10"
                    android:textAlignment="center"
                    android:textColor="@color/black" />
  
            </LinearLayout>
  
        </LinearLayout>
  
    </HorizontalScrollView>
</RelativeLayout>

Paso 5: trabajar con el archivo MainActivity.kt

Vaya al archivo MainActivity.kt y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.kt. Se agregan comentarios dentro del código para comprender el código con más detalle.

Kotlin

package com.gtappdevelopers.kotlingfgproject
  
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.mukesh.image_processing.ImageProcessor
  
class MainActivity : AppCompatActivity() {
  
    // on below line we are creating variables.
    lateinit var oneIV: ImageView
    lateinit var twoIV: ImageView
    lateinit var threeIV: ImageView
    lateinit var fourIV: ImageView
    lateinit var fiveIV: ImageView
    lateinit var sixIV: ImageView
    lateinit var sevenIV: ImageView
    lateinit var eightIV: ImageView
    lateinit var nineIV: ImageView
    lateinit var tenIV: ImageView
    lateinit var originalIV: ImageView
  
    lateinit var bmp: Bitmap
    lateinit var onebmp: Bitmap
    lateinit var twobmp: Bitmap
    lateinit var threebmp: Bitmap
    lateinit var fourbmp: Bitmap
    lateinit var fivebmp: Bitmap
    lateinit var sixbmp: Bitmap
    lateinit var sevenbmp: Bitmap
    lateinit var eightbmp: Bitmap
    lateinit var ninebmp: Bitmap
    lateinit var tenbmp: Bitmap
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
          
        // creating a variable for our image processor.
        val processor = ImageProcessor()
  
        // initializing bitmap with our image resource.
        bmp = BitmapFactory.decodeResource(resources, R.drawable.dog)
  
        // on below line we are initializing
        // our variable with their ids.
        oneIV = findViewById(R.id.idIVOne);
        twoIV = findViewById(R.id.idIVTwo);
        threeIV = findViewById(R.id.idIVThree);
        fourIV = findViewById(R.id.idIVFour);
        fiveIV = findViewById(R.id.idIVFive);
        sixIV = findViewById(R.id.idIVSix);
        sevenIV = findViewById(R.id.idIVSeven);
        eightIV = findViewById(R.id.idIVEight);
        nineIV = findViewById(R.id.idIVNine);
        tenIV = findViewById(R.id.idIVTen);
        originalIV = findViewById(R.id.idIVOriginalImage);
  
        // below line is use to add tint effect to our original
        // image bitmap and storing that in one bitmap.
        onebmp = processor.tintImage(bmp, 90)
  
        // after storing it to one bitmap
        // we are setting it to imageview.
        oneIV.setImageBitmap(onebmp)
  
        // below line is use to apply gaussian blur effect
        // to our original image bitmap.
        twobmp = processor.applyGaussianBlur(bmp);
        twoIV.setImageBitmap(twobmp);
  
        // below line is use to add sepia toing effect
        // to our original image bitmap.
        threebmp = processor.createSepiaToningEffect(bmp, 1, 2.0, 1.0, 5.0);
        threeIV.setImageBitmap(threebmp);
  
        // below line is use to apply saturation
        // filter to our original image bitmap.
        fourbmp = processor.applySaturationFilter(bmp, 3);
        fourIV.setImageBitmap(fourbmp);
  
        // below line is use to apply snow effect
        // to our original image bitmap.
        fivebmp = processor.applySnowEffect(bmp);
        fiveIV.setImageBitmap(fivebmp);
  
        // below line is use to add gray scale
        // to our image view.
        sixbmp = processor.doGreyScale(bmp);
        sixIV.setImageBitmap(sixbmp);
  
        // below line is use to add engrave effect
        // to our image view.
        sevenbmp = processor.engrave(bmp);
        sevenIV.setImageBitmap(sevenbmp);
  
        // below line is use to create a contrast
        // effect to our image view.
        eightbmp = processor.createContrast(bmp, 1.5);
        eightIV.setImageBitmap(eightbmp);
  
        // below line is use to add shadow effect
        // to our original bitmap.
        ninebmp = processor.createShadow(bmp);
        nineIV.setImageBitmap(ninebmp);
  
        // below line is use to add flea
        // effect to our image view.
        tenbmp = processor.applyFleaEffect(bmp);
        tenIV.setImageBitmap(tenbmp);
  
        // on below line we are adding click listeners
        // for all image views.
        oneIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(onebmp)
        }
  
        twoIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(twobmp)
        }
  
        threeIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(threebmp)
        }
        fourIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(fourbmp)
        }
        fiveIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(fivebmp)
        }
        sixIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(sixbmp)
        }
        sevenIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(sevenbmp)
        }
        eightIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(eightbmp)
        }
        nineIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(ninebmp)
        }
        tenIV.setOnClickListener {
            // on clicking on each filter we are
            // setting that filter to our original image.
            originalIV.setImageBitmap(tenbmp)
        }
    }
}

Ahora ejecute su aplicación para ver el resultado de la aplicación. 

Producción:

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *