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

OSCHINA-MIRROR/JHFreedm-TakePhoto

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.2+.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 02:42 30737f2

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

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

V2.0

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

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

Предварительный просмотр:

Изображение: Запуск эффекта

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

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

  1. Наследование:

    • Наследовать TakePhotoActivity, TakePhotoFragmentActivity или TakePhotoFragment.
    • Получить экземпляр TakePhoto через getTakePhoto().
    • Переопределить методы takeSuccess(), takeFail() и takeCancel() для получения результатов. Этот способ прост в использовании и подходит для большинства случаев. Для более детального ознакомления см. simple. Если наследование не подходит для вашего проекта, можно использовать второй способ.
  2. Компоновка:

    • Создать экземпляр TakePhoto: TakePhoto takePhoto = new TakePhotoImpl(getActivity(), this);
    • Вызвать методы TakePhoto в onCreate(), onActivityResult() и onSaveInstanceState().
    • Использовать экземпляр TakePhoto для выполнения операций.
    • Обрабатывать результаты в методах TakeResultListener.

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

TakePhoto предоставляет три способа получения изображений: съёмка, выбор из галереи и выбор из файлов.

API:

/**
 * Получение изображения из файла (без обрезки)
 */
void onPickFromDocuments();

/**
 * Выбор изображения из галереи (без обрезки)
 */
void onPickFromGallery();

/**
 * Съёмка изображения (без обрезки) с сохранением в outPutUri
 */
void onPickFromCapture(Uri outPutUri);

Все эти способы также предоставляют соответствующие API для обрезки. Подробнее см.: https://github.com/crazycodeboy/TakePhoto#обрезка-изображений.

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

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

API:

  • Съёмка и обрезка:
    • onPickFromCaptureWithCrop(outPutUri, options) — получение изображения со съёмкой и обрезкой с сохранением в outPutUri.
    • options — параметры обрезки.
  • Выбор из галереи и обрезка:
    • onPickFromGalleryWithCrop(outPutUri, options).
    • Получение изображения из галереи с обрезкой и сохранением в outPutUri.
  • Выбор из файлов и обрезка:
    • onPickFromDocumentsWithCrop(outPutUri, options).
    • Получение изображения из файлов с обрезкой и сохранением в outPutUri.

Также TakePhoto позволяет обрезать уже существующие изображения:

  • Обрезка изображения:
    • onCrop(imageUri, outPutUri, options).
    • imageUri — изображение для обрезки.
    • outPutUri — путь сохранения обрезанного изображения.
    • options — параметры обрезки.

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

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

Если система не имеет встроенного или стороннего инструмента обрезки, TakePhoto автоматически использует свой собственный инструмент обрезки.

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

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

API:

  • Включение сжатия:
    • onEnableCompress(config, showCompressDialog).
    • config — конфигурация сжатия.
    • showCompressDialog — показывать ли диалог прогресса при сжатии. Пример использования:
getTakePhoto().onEnableCompress(compressConfig, true).onPickFromGalleryWithCrop(imageUri, cropOptions);

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

Можно также сжимать конкретные изображения:

Пример использования:

new CompressImageImpl(compressConfig).compress(picturePath, new CompressImage.CompressListener() {
    @Override
    public void onCompressSuccess(String imgPath) {//успешное сжатие изображения

    }
    @Override
    public void onCompressFailed(String imagePath, String msg) {//сжатие изображения не удалось

    }});
``` **CompressConfig**  это класс конфигурации, используемый для сжатия изображений. Вы можете использовать CompressConfig.Builder для настройки размера и качества изображения после сжатия. Если вы хотите изменить способ сжатия, вы также можете сделать это через CompressConfig.Builder.

## Использование:  
```java
CompressConfig compressConfig=new CompressConfig.Builder().setMaxSize(50*1024).setMaxPixel(800).create();
getTakePhoto().onEnableCompress(compressConfig,true).onPickFromGallery();

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

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

Рисунок 1. Отчёт о тестировании совместимости.

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

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

  1. Для некоторых телефонов при съёмке будет происходить восстановление Activity. В TakePhoto реализованы соответствующие процедуры восстановления в onSaveInstanceState и onCreate.
  2. На некоторых телефонах при съёмке или выборе фотографии из галереи может меняться ориентация экрана, что приводит к сбою съёмки. Чтобы решить эту проблему, добавьте android:configChanges="orientation|keyboardHidden|screenSize" в AndroidManifest.xml для Activity, использующих TakePhoto. Например:
<activity
    android:name=".MainActivity"
    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 V2.0.4 на JCenter (если вам интересно, как опубликовать проект на JCenter, см.: «Как легко опубликовать Android library на JCenter»).
Gradle:

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

Maven:

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

Заключение

Если у вас есть предложения по улучшению TakePhoto или вы хотите внести изменения, приглашаем вас Fork and Pull requests.

Опубликовать ( 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