Funkcjonalność zrobienia/dodania zdj, wykadrowania i wysłania na serwer

1

Hej, robię właśnie funkcjonalność do apki społecznościowej, która polega na dodaniu zdjęcia z galerii lub zrobienia zdjęcia aparatem, skadrowania go do kwadratu i przesłania na serwer. Zdjęcia te będą tylko wykorzystywane w aplikacjach mobilnych - nie mam apki webowej.

Problemy i pytania:

  1. Występuje mi problem z automatycznym obracaniem zdjęcia przy otwieraniu z galerii. Pamiętam, że kiedyś to ogarniałem czymś takim jak ExifInterface, ale pytanie czy nadal takie problemy występują ?
  2. Jakie polecane biblioteki do kadrowania wczytanych zdjęć zanim wyświetlę je w ImageView ?
  3. Zapewne najlepszym sposobem jest przesyłanie ich w multiparcie ? Są jakieś polecane rozdzelczości i formaty (jpg/png) do przesyłania tego ?
  4. Plik do multipartu mam tworzyć na podstawie zawartości już wczytanej do ImageView czy z uri czy jak ?

Pozdrawiam

2
  1. To zależy od urządzenia. Nie ma reguły.

  2. Co masz dokładnie na myśli? Chodzi Ci o to, żeby użytkownik mógł sam wyznaczyć część obrazka, która będzie wycięta czy o to, żeby był poprawnie wyświetlany w ImageView? Do tego pierwszego, to nie wiem. Dawno temu korzystałem z czegoś takiego - https://github.com/ArthurHub/Android-Image-Cropper. Dzisiaj pewnie napisałbym coś takiego sam. Jeśli chodzi o to drugie, to wystarczy zwykłe scaleType na ImageView - https://thoughtbot.com/blog/android-imageview-scaletype-a-visual-guide.

  3. Tak, najlepiej multipart. Nie ma raczej zalecanego formatu, ale ja bym się trzymał jpeg, jeśli nie ma kanału z przeźroczystością, bo ma najlepszy stosunek jakości do wielkości pliku dla większości zastosowań w przypadku plików z galerii.

  4. Zależy co chcesz przesłać. Jeśli oryginalny plik to z URI. Jeśli podgląd tego co ma użytkownik, to wyciągnąć z ImageView, ale musisz brać pod uwagę, że to będzie przeskalowane, więc może musiałbyś robić coś w tym stylu, że masz oryginalny obrazek i wycinasz jego część, która odpowiada temu, co widzi użytkownik i potem przesyłasz wyciętą część. Jak źródło zamienić na bajty, to już zależy od źródła. Akurat coś w tym stylu teraz robiłem, więc jak chcesz, możesz zobaczyć.

Ty byś pewnie potrzebował czegoś w stylu bitmapa na bajty. Ja robię akurat bitmapę do pliku, ale korzystałbyś pewnie z tego API.

0

@Michał Sikora:

  1. Czyli muszę ten ExifInterface jednak użyć i sprawdzić wczytane zdj ?
  2. Tak, użytkownik ma sam wyznaczyć część obrazka, powiększy lub pomniejszych - aby idealnie wpasował się w kwadrat po prostu.
  3. Ok
  4. No wlasnie generalnie nie musze wysylac oryginalego pliku. Chce wyslac jedynie to co widzi uzytkownik w ImageView juz po scropowaniu obrazka do kwadratu - ewentualnie troszke wieksze (gdyby ktos to robil na jakims starym, malym tel). To bedzie tylko wyswietlane w apkach mobilnych.
1
  1. Tak.
  2. No to ja bym zrobił tak, że trzymałbym przycięty przez użytkownika plik/bitmapę gdzieś jako referencję i w momencie gdy użytkownik naciśnie "zapisz" czy cokolwiek, to pomniejszył go do maksymalnego rozmiaru, jeśli jest większy, i wysłał na serwer.

1 użytkowników online, w tym zalogowanych: 0, gości: 1