Galeri / Kamera Kullanarak Resim Yükleme ve Croplama

Mobil uygulamalarda, fotoğraf çekmek ya da galeride ki fotoğrafı kullanabilmek önemli bir özelliktir. Birçok uygulamada kullanıcı, profil fotoğrafını kullanma konusunda ihtiyacı bulunabilmektedir. Uygulama içerisinde, tam çözünürlüğü olan resmi galeriye kaydetmeden, kırpmak ve olası hafıza istisnalarından kaçınmak isteyebilirsiniz.

Bu makalemde, bir Android  sosyal medya uygulamasındaki gibi profil fotoğrafı çekme işlemi ve çekilen ya da galeriden seçilen fotoğrafı crop (kırpma) yapmayı örnekleyeceğim.

Örneklediğim projemin kodlarını indirmek isterseniz; yapmanız gereken tek şey aşağıya koyduğum KODLARI İNDİR resmine tıklamak.

download

1- uCrop – Crop Kütüphanesi

Kırpma işlevi için uCrop kütüphanesini kullanacağız. Bu kütüphane birçok popüler uygulama kullanmaktadır ve çeşitli cihazlarda / işletim sistemi sürümlerinde test edilmiştir. uCrop kütüphanesi en iyi kırpma deneyimini sağlasa da, kameradan fotoğraf çekme veya galeriden fotoğraf seçme özelliği bulunmamaktadır. Sadece fotoğrafın kırpılmış(croplanmış) halini bitmap olarak çevirmektedir.

Bu makalede uCrop kütüphanesinin işlevlerine ek olarak, görüntüyü kameradan veya galeriden seçmek için bir özellik geliştireceğiz.

uCrop kütüphanesini daha detaylı dokümantasyonundan inceleyebilirsiniz

2- Proje Ayarları ve Profil Arayüzünü Oluşturma

Amacımız, sosyal medyadaki gibi basit bir profil kullanıcı arayüzü (Instagram gibi) oluşturmak ve profil görüntüsünü uygulamak için görüntü kırpma işlevini kullanmaktır. Kamerayı kullanarak fotoğraf çekebilir veya galeriden seçim yapabilir, kırpabilir ve profil görüntüsü olarak ayarlayabilirsiniz. Öyleyse Android Studio’da yeni bir proje oluşturarak başlayalım.

1- Android Studio yeni proje oluşturalım.
2- Android Studio Ide ile oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek  kütüphanelerimizi yükleyelim.

3- Aşağıdaki kaynakları ilgili strings.xml, dimen.xml ve colors.xml dosyalarına ekleyin.

4- Projenin içinde res klasoründa arayüz kullanacağınız iconlar bulunmaktadır. Bu yüzden res dizinini kopyalıp, sizin projenizdeki yerine yapıştırın.

5- Ana sınıfınızın xml ini açıp, aşağıdaki kodu yerleştirin.

6- Layout dizinin de layout_toolbar_profile.xml dosyasını oluşturun ve aşağıdaki kodu yerleştirin.

Profil sayfamızı oluşturduk.

3- Görüntü Alma ve Crop İşlevi Ekleme

Şimdi ise profil görüntüsüne veya artı simgesine dokunarak resim çekme işlemini nasıl yapacağımıza bakalım.

6- res dizininin altına xml dizini oluşturup, xml dizini içinde de file_paths.xml adlı bir xml dosyası oluşturun.Burada kamera görüntülerini galeride saklamak yerine önbelleğe alınmış bir yerde saklamak için bir FileProvider yolu tanımladık.

7- AndroidManifest.xml dosyasında bazı değişiklikler yapmamız gerekir.

  • INTERNETCAMERA ve STORAGE izinleri eklemeliyiz.
  • Kırpma işlemini başlatmak için UCropActivity sınıfını tanıtmamız gerekir.
  • 6. adımda tanımladığımız xml kullanarak FileProvider bilgilerini ekleyin.

8. Görüntüyü görüntülemek için Glide kullandığımızdan, MyGlideModule adlı bir sınıf oluşturun.

9. Karmaşıklığı azaltmak için, görüntüyü seçmeye ve kırpmaya özen gösteren bir activity sınıfı yazdım. Tek yapmanız gereken, bu activity’i projenize eklemek ve bu activity sınıfını çağırmak.

ImagePickerActivity.java oluşturun ve aşağıdaki kodu ekleyin.

3.1 Fotoğrafı Çekme Anında Görüntünün Gösterilmesi

Bu işlem için MainActivity sınıfında ImagePickerActivity.showImagePickerOptions()  metodunu çağırmalıyız.

Galeriden seçtiğimiz görüntüyü 1 × 1 en boy oranına sahip olacak şekilde ayarlamak istersek, aşağıdaki kodu yazmalıyız.

10- Şuana kadar yazdığımız metodları kullanmak için MainActivity sınıfını açalım. Bu sınıfta boş profil resmine ya da artı iconuna tıkladığımızda, resim çekme ve crop işlemini yapan  metotları kullanacağız.

Şimdi uygulamayı çalıştırın ve artık kolaylıkla fotoğraf işlemlerini yapabilirsiniz.

Kaynak

1- https://www.androidhive.info/2019/02/android-choosing-image-camera-gallery-crop-functionality/

Kategori Genel
Etiketler