1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/JHFreedm-TakePhoto

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

TakePhoto — это открытая библиотека инструментов для Android, которая позволяет получать фотографии с камеры или из галереи и альбома, обрезать и сжимать изображения. Последняя версия библиотеки — 4.0.3.

Более ранние версии и API описаны в разделе TakePhoto2.0+.

Платформа для общения: QQ группа: 556387607 (группа 1, не заполнена).

V4.0

  • Поддержка получения фотографий через камеру.
  • Поддержка выбора фотографий из галереи.
  • Поддержка выбора фотографий из файлов.
  • Поддержка пакетного выбора изображений.
  • Поддержка сжатия и пакетного сжатия изображений.
  • Поддержка обрезки и пакетной обрезки изображений.
  • Поддержка автоматического исправления угла поворота фотографии.
  • Автоматическое управление разрешениями (не нужно беспокоиться о проблемах с SD-картой и камерой).
  • Возможность индивидуальной настройки параметров обрезки и сжатия.
  • Предоставление встроенного инструмента для обрезки (по выбору).
  • Интеллектуальный выбор и обработка исключений при обрезке.
  • Восстановление после сбоя Activity после съёмки.
  • Совместимость с Android 7.0.
  • Поддержка различных инструментов сжатия.
  • Поддержка различных инструментов выбора изображений.

GitHub: https://github.com/crazycodeboy/TakePhoto.

Содержание

  • Установка.
  • Демонстрация.
  • Использование.
  • Пользовательский интерфейс.
  • API.
  • Совместимость.
  • Вклад.
  • Обновления.
  • Заключение.

Установка

Gradle:

    compile 'com.jph.takephoto:takephoto_library:4.0.3'

Maven:

<dependency>
  <groupId>com.jph.takephoto</groupId>
  <artifactId>takephoto_library</artifactId>
  <version>4.0.3</version>
  <type>pom</type>
</dependency>

Демонстрация

Скриншоты:

Использование

Есть два способа использования TakePhoto:

  1. Наследование: наследуйте TakePhotoActivity, TakePhotoFragmentActivity или TakePhotoFragment. Получите экземпляр TakePhoto через getTakePhoto() и выполните соответствующие операции. Переопределите следующие методы для получения результатов:
 void takeSuccess(TResult result);
 void takeFail(TResult result,String msg);
 void takeCancel();

Этот способ прост в использовании и удовлетворяет большинству потребностей. 2. Сборка: реализуйте интерфейсы TakePhoto.TakeResultListener и InvokeListener. Обратитесь к TakePhotoActivity для основных шагов.

Пользовательский интерфейс

Не удалось найти информацию о пользовательском интерфейсе в исходном тексте. Настройка фотоальбома

TakePhoto позволяет не только настраивать параметры, но и интерфейс (UI) приложения. В этой статье мы рассмотрим, как настроить интерфейс инструментов для создания фотоальбомов и обрезки фотографий в TakePhoto.

Настройка панели инструментов

Чтобы настроить панель инструментов (Toolbar) в фотоальбоме TakePhoto, выполните следующие шаги:

  1. Создайте файл с именем toolbar.xml в каталоге res/layout.
  2. Введите следующий код в файл toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:theme="@style/CustomToolbarTheme"
    android:background="#ffa352">
</android.support.v7.widget.Toolbar>

Этот код позволяет настроить тему панели инструментов и её цвет фона.

Настройка строки состояния

Для настройки цвета строки состояния (Status Bar) выполните следующие действия:

  1. Создайте новый файл с именем colors.xml в папке res/values.
  2. Добавьте следующий код в colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="multiple_image_select_primaryDark">#212121</color>
</resources>

Здесь вы можете настроить цвет строки состояния.

Настройка текста подсказок

Чтобы изменить текст подсказок в фотоальбоме, добавьте следующий код в файл string.xml в директории res/values:

<resources>    
    <string name="album_view">Выберите картинку</string>
    <string name="image_view">Нажмите для выбора</string>
    <string name="add">Готово</string>
    <string name="selected">Выбрано</string>
    <string name="limit_exceeded">Можно выбрать максимум %d картинок</string>
</resources>

Это позволит вам настроить текст подсказок для фотоальбома.

Настройка инструмента обрезки

Создайте два новых файла с именами crop__activity_crop.xml и crop__layout_done_cancel.xml в каталоге res/layout:

  • crop__activity_crop.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.soundcloud.android.crop.CropImageView
        android:id="@+id/crop_image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentTop="true"
        android:background="@drawable/crop__texture"
        android:layout_above="@+id/done_cancel_bar" />
    <include
        android:id="@+id/done_cancel_bar"
        android:layout_alignParentBottom="true"
        layout="@layout/crop__layout_done_cancel"
        android:layout_height="50dp"
        android:layout_width="match_parent" />
</RelativeLayout>
  • crop__layout_done_cancel.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/Crop.DoneCancelBar">
    <FrameLayout
        android:id="@+id/btn_cancel"
        style="@style/Crop.ActionButton">
        <TextView style="@style/Crop.ActionButtonText.Cancel" />
    </FrameLayout>
    <FrameLayout
        android:id="@+id/btn_done"
        style="@style/Crop.ActionButton">
        <TextView style="@style/Crop.ActionButtonText.Done" />
    </FrameLayout>
</LinearLayout>

Эти файлы позволяют настроить внешний вид инструмента обрезки.

API

Получение изображений

В TakePhoto можно получить изображения тремя способами:

  • Из файлов.
  • Из галереи.
  • С камеры.

Каждый из этих способов имеет свой API. Например, для получения изображения из файла используется метод onPickFromDocuments().

Обрезка изображений

Также в TakePhoto есть возможность обрезать полученные изображения. Для этого используются соответствующие методы API, такие как onPickFromCaptureWithCrop() и onPickMultipleWithCrop(). Вот перевод текста на русский язык:

CropOptions

CropOptions — это класс конфигурации, используемый для обрезки. С его помощью можно настроить пропорции обрезки изображения, максимальный размер вывода и использовать ли собственный инструмент обрезки TakePhoto.

Использование:

CropOptions cropOptions=new CropOptions.Builder().setAspectX(1).setAspectY(1).setWithOwnCrop(true).create();  
getTakePhoto().onPickFromDocumentsWithCrop(imageUri,cropOptions);  
//или  
getTakePhoto().onCrop(imageUri,outPutUri,cropOptions);

Примечание:

Поскольку разные производители Android-устройств по-разному настраивают систему, возможно, в системе нет встроенного или стороннего инструмента обрезки. Чтобы повысить совместимость TakePhoto, если в системе отсутствует встроенный или сторонний инструмент обрезки, TakePhoto автоматически переключится на использование собственного инструмента обрезки TakePhoto для выполнения обрезки.

Кроме того, TakePhoto 4.0+ поддерживает указание использования собственного альбома TakePhoto, например: takePhoto.setTakePhotoOptions(new TakePhotoOptions.Builder().setWithOwnGallery(true).create()); Подробности см. в Demo.

Сжатие изображения

Вы можете выбрать, следует ли сжимать изображение. Для этого нужно сообщить ему, хотите ли вы включить функцию сжатия и CompressConfig.

API

/**
 * Включить сжатие изображения
 * @param config Конфигурация сжатия изображения
 * @return
 */
void onEnableCompress(CompressConfig config,boolean showCompressDialog);

Использование:

TakePhoto takePhoto=getTakePhoto();
takePhoto.onEnableCompress(compressConfig,true);
takePhoto.onPickFromGallery();

Если вы включили сжатие изображений, TakePhoto будет использовать CompressImage для сжатия изображений. CompressImage в настоящее время поддерживает сжатие размера и качества изображения. По умолчанию CompressImage включает двойное сжатие размера и качества.

Обрезка и сжатие конкретного изображения

Кроме того, вы также можете обрезать и сжать конкретное изображение:

Использование:

new CompressImageImpl(compressConfig,result.getImages(), new CompressImage.CompressListener() {
    @Override
    public void onCompressSuccess(ArrayList<TImage> images) {
        //успешное сжатие изображения
    }
    @Override
    public void onCompressFailed(ArrayList<TImage> images, String msg) {
        //сжатие изображения не удалось
    }
}).compress();

CompressConfig

CompressConfig — это конфигурация сжатия изображения. Вы можете установить соответствующие параметры для размера и качества после сжатия с помощью CompressConfig.Builder. Если вы хотите изменить способ сжатия, вы можете сделать это с помощью CompressConfig.Builder.

Использование:

CompressConfig compressConfig=new CompressConfig.Builder().setMaxSize(50*1024).setMaxPixel(800).create();

Укажите инструмент сжатия

Используйте инструмент сжатия TakePhoto:

CompressConfig config=new CompressConfig.Builder()
                .setMaxSize(maxSize)
                .setMaxPixel(width>=height? width:height)
                .create();
takePhoto.onEnableCompress(config,showProgressBar);

Используйте Luban для сжатия:

LubanOptions option=new LubanOptions.Builder()
                .setGear(Luban.CUSTOM_GEAR)
                .setMaxHeight(height)
                .setMaxWidth(width)
                .setMaxSize(maxSize)
                .create();
CompressConfig config=CompressConfig.ofLuban(option);
takePhoto.onEnableCompress(config,showProgressBar);

Подробности см. в Demo:CustomHelper.java

Совместимость

Android6.0

В Android 6.0 добавлен «Контроль разрешений во время выполнения». Чтобы справиться с этим изменением, TakePhoto добавляет автоматическое управление разрешениями. Когда TakePhoto обнаруживает необходимость в разрешении, он автоматически запрашивает разрешение. Поэтому вам не нужно беспокоиться о проблемах с использованием разрешений.

Android7.0

В Android N StrictMode был реализован в рамках Android Framework. Приложения могут совместно использовать файлы, что отличается от предыдущих версий. Чтобы адаптироваться к изменениям в Android 7.0, а также чтобы упростить использование TakePhoto, TakePhoto автоматически адаптируется к версии телефона Android. Вам по-прежнему можно передавать Uri типа Uri imageUri = Uri.fromFile(file) в TakePhoto без проблем совместимости.

Тестирование TakePhoto на совместимость

Отчёт о тестировании совместимости

Повышение совместимости

TakePhotо написан на основе стандартных API Android и совместим с основными версиями Android на рынке. Если у вас возникнут проблемы с совместимостью при использовании, вы можете создать Issue.

  1. Чтобы приспособиться к некоторым телефонам, которые восстанавливают Activity при съёмке, TakePhoto выполняет соответствующее восстановление в onSaveInstanceState и onCreate.
  2. Чтобы приспособиться к некоторым телефонам, у которых направление экрана меняется при съёмке или выборе изображения из галереи, что приводит к сбою съёмки, вы можете добавить android:configChanges="orientation|keyboardHidden|screenSize" в файл AndroidManifest.xml для Activity, использующей TakePhoto. Перевод текста на русский язык:
android:screenOrientation="portrait"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Вклад

Если вы столкнулись с какими-либо проблемами при использовании TakePhoto, вы можете создать Issues. Кроме того, мы приглашаем всех внести свой вклад в TakePhoto и приветствуем Fork and Pull requests.

Обновление информации

v4.0.3(2017/1/18)

Исправления ошибок

  1. Исправлена ошибка и добавлены новые функции(62a6725) — @Yanqilong
  2. Исправлено дублирование пути при сжатии Лубана (a0a64a59) — @namezhouyu

v4.0.2(2016/11/28)

  1. После успешного сжатия возвращается путь к исходному изображению (originalPath), чтобы пользователь мог самостоятельно обработать исходное изображение.
  2. После успешного сжатия путь path был изменён на compressPath.
  3. После успешного сжатия возвращается тип источника изображения, который теперь делится на CAMERA и OTHER.
  4. Пользователь может настроить CompressConfig.enableReserveRaw(boolean) метод, true сохраняет исходное изображение, false удаляет исходное изображение, эта конфигурация эффективна только тогда, когда тип равен CAMERA.
  5. Функция поворота фотографии была исправлена и теперь является необязательной.

Наконец

О запутывании кода

Если в вашем проекте включено запутывание кода, вы можете добавить следующий код в файл правил запутывания (например, proguard-rules.pro):

-keep class com.jph.takephoto.** { *; }
-dontwarn com.jph.takephoto.**

-keep class com.darsh.multipleimageselect.** { *; }
-dontwarn com.darsh.multipleimageselect.**

-keep class com.soundcloud.android.crop.** { *; }
-dontwarn com.soundcloud.android.crop.**

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/JHFreedm-TakePhoto.git
git@api.gitlife.ru:oschina-mirror/JHFreedm-TakePhoto.git
oschina-mirror
JHFreedm-TakePhoto
JHFreedm-TakePhoto
master